TypeScript实践总结
下文将TypeScript简称ts
一、为什么要学
1.1 减少bug,提高质量
- 强语言,语法等方面异常,编译阶段“提前”报错
- 支持面向对象,软件设计与工程化更为成熟,更容易做单元测试、持续集成等
1.2 提高效率
- 语言简单易学
- ide支持更为友好,如:智能提示、变量强关联、重构等
- 绝大部分常用类库已经支持
1.3 业内趋势
1.4 代表作品
- 越来越多前端类库改用ts
- github上使用ts开发仓库-按star降序
- vscode
- node下一代-deno
- angular
- nest
- apollo-client
- ....不一一举例
二、练级攻略
2.1 基础语法
2.2 编码风格
2.3 核心功能
- tsconfig.json
- 接口
- 泛型
- 高级类型
- 面向对象
- [程序设计]
2.4 编译原理
三、适用场景
尤其适合:类库、组件等公共组件开发
四、推荐ide
webstorm > vscode
优点: 开箱即用(无需安装插件)、易于重构【个人觉得非常重要】
缺点: 收费、没idea成熟
五、推荐书籍
- TypeScript入门与实战
- 推荐级别A,理由:介绍全面,适合入门及进阶
- 深入理解TypeScript
- 推荐级别B,理由:入门及编译简介
六、tsconfig.json配置demo
{
"compilerOptions": {
"pretty": true,
"module": "commonjs",
"importHelpers": true,
"target": "es5",
"lib": [
"es2015",
"es2016",
"es2017",
"es2018",
"es2019",
"dom",
"ES2015.Promise"
],
"allowJs": true,
"sourceMap": false,
"baseUrl": "./src",
"outDir": "./build/src/",
"paths": {
"@/*": [
"*"
],
"tslib": [
"path/to/node_modules/tslib/tslib.d.ts"
]
},
//编译异常时候,禁止发行
"noEmitOnError": true,
//禁止隐性any
"noImplicitAny": true,
//严格的null检查,避免如可选参数,未判断undefined引发的问题等
"strictNullChecks": true,
//未使用的变量,抛出错误
"noUnusedLocals": true,
//未使用的参数,抛出错误
"noUnusedParameters": true,
//检查函数是否有返回值
"noImplicitReturns": true,
//启用严格模式,对类型赋值、类型转换更严格
"strict": true,
//https://mariusschulz.com/blog/downlevel-iteration-for-es3-es5-in-typescript
"downlevelIteration": true
},
"typeRoots": [
"node_modules/@types",
"typings"
],
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules",
"test"
]
}
八、ts的缺点
8.1 不得已的any类型
存在后的坑: any类型,不支持强类型、智能提示等,相当于把ts回退到js
存在原因:
1.兼容性,老代码及外部依赖如webapi接口返回参数类型不确定,只能用any类型;
2.类库不健全,lid.d.ts不全面,导致部分属性、方法的类型描述不完整,得通过添加|any组合类型才能满足需求,不得不用any类型。
改进办法: 有明确类型的通过组合类型来完成类型定义,如: age:int | any,比纯any,IDE能添加相关的属性智能提示及部分错误使用场景下的错误提示
8.2 复合类型没必要
组合类型、交叉类型、索引类型、映射对象类型,意义不大,适用场景少,易滥用,明显降低可读性。js的问题是语言太随意,导致很多程序员把大量的时间浪费在语法上,多向golang学一下
8.3 面向对象不彻底
不支持重载:c#、java没抄好?不是,是底层js不支持
8.4 JS本身诸多缺点
(1)js是门非常容易出bug的语言,当下统计数据多数不准。原因在于生产环境js运行在客户端浏览器,出了bug,要么没前端监控,要么没被QA发现。
(2)js上手很容易,学好很难,一种需求,有N种编码方案,沟通交流成本很高
9. 最佳实践
- 整洁的js代码
- 整洁的js代码-中文翻译
- 将超过5000万行JS代码迁移到TypeScript,我们得到的10大见解
- Typescript Best Practices
- TypeScript系列(五)最佳实践
- ts面向对象边界?建议服务端:尽量面向对象编程;客户端:关注打包大小及编译后的js代码,易复用的业务逻辑抽象为类,工具类还是使用传统的面向过程的方式
- 减少any类型
- ......TODO待补充
TypeScript实践总结的更多相关文章
- 《Vue3.x+TypeScript实践指南》已出版
转眼回长沙快2年了,图书本在去年就已经完稿,因为疫情,一直耽搁了,直到这个月才出版!疫情之下,众生皆苦!感觉每天都是吃饭.睡觉.上班.做核酸! 图书介绍 为了紧跟技术潮流,该书聚焦于当下火的Vue3和 ...
- Serverless 实战 —— 函数计算 + Typescript 实践
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
- 前端项目模块化的实践3:使用 TypeScript 的收益
以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...
- TypeScript在react项目中的实践
前段时间有写过一个TypeScript在node项目中的实践. 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的. 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我 ...
- TypeScript在node项目中的实践
TypeScript在node项目中的实践 TypeScript可以理解为是JavaScript的一个超集,也就是说涵盖了所有JavaScript的功能,并在之上有着自己独特的语法.最近的一个新项目开 ...
- 在React旧项目中安装并使用TypeScript的实践
前言 本篇文章默认您大概了解什么是TypeScript,主要讲解如何在React旧项目中安装并使用TypeScript. 写这个的目的主要是网上关于TypeScript这块的讲解虽然很多,但都是一些语 ...
- Typescript 开发环境的最佳实践
Typescript 开发环境的最佳实践 0️⃣ git init(略) 1️⃣️️ 初始化:$ yarn add -D ts-node typescript 2️⃣ 生成 tsconfig.json ...
- Typescript 最佳实践
文章列表: <一>大话 TypeScript 基本类型 <二>大话 Typescript 枚举 <三>大话 Typescript 接口 <四>大话 Ty ...
- TypeScript 在开发应用中的实践总结
背景 以前 hybrid app 的移动端开发模式下,H5 和客户端通信的 js sdk 代码使用 js 编写,sdk 方法的说明使用文档输出.对于开发的使用来说,在 IDE 中不能得到友好的参数类型 ...
- TypeScript 前端工程最佳实践
作者:王春雨 前言 随着前端工程化的快速发展, TypeScript 变得越来越受欢迎,它已经成为前端开发人员必备技能. TypeScript 最初是由微软开发并开源的一种编程语言,自2012年10月 ...
随机推荐
- @RequestBody中使用@DateTimeFormat报错:JSON parse error: Expected array or string.; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException
原因分析 根据异常提示:不匹配输入异常,指输入的参数错误,说是只支持String类型和Array数组类型的. @PostMapping("/test") public Dto ge ...
- OCR文字检测与识别系统:融合文字检测、文字识别和方向分类器的综合解决方案
1. OCR文字检测与识别系统:融合文字检测.文字识别和方向分类器的综合解决方案 前两章主要介绍了DBNet文字检测算法以及CRNN文字识别算法.然而对于我们实际场景中的一张图像,想要单独基于文字检测 ...
- 基于罪名法务智能知识图谱(含码源):基于280万罪名预测、20W法务问答与法律资讯问答功能
基于罪名法务智能知识图谱(含码源):基于280万罪名预测.20W法务问答与法律资讯问答功能 项目功能 目前知识图谱在各个行业中应用逐步打开,尤其在金融,医疗,法律,旅游方面.知识图谱助力法律智能,能够 ...
- 19.12 Boost Asio 获取远程进程
远程进程遍历功能实现原理与远程目录传输完全一致,唯一的区别在于远程进程枚举中使用EnumProcess函数枚举当前系统下所有活动进程,枚举结束后函数返回一个PROCESSENTRY32类型的容器,其中 ...
- LyScript 插件实现UPX寻找入口
LyScript 插件可实现对压缩壳的快速脱壳操作,目前支持两种脱壳方式,一种是运用API接口自己编写脱壳过程,另一种是直接加载现有的脱壳脚本运行脱壳. 插件地址:https://github.com ...
- PE格式:VA地址与FOA地址
PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如 ...
- 从嘉手札<2023-11-27>
"我也没做错什么,放它去看海,总比跟着我好" 很多时候,悲伤总是细细的钻进心底 悄悄的生根发芽 待到了时机 它便如同一株参天巨树般郁郁葱葱 郁郁葱葱的令人发疯 人生本就像是做了一场 ...
- 使用DoraCloud搭建支持统信UOS桌面的信创云桌面系统
信创云桌面 信创云桌面采用国产的芯片,支持国产的桌面操作系统.本方案采用海光CPU的服务器,运行DoraCloud云桌面系统.可以支持统信UOS桌面系统和麒麟桌面操作系统. 环境准备 服务器:海光 5 ...
- GJK算法:两个凸集的碰撞测试
GJK算法用于判断两个凸集是否相交,其中GJK是三个提出者的姓名首字母.为了便于理解(偷懒),下面的内容都只在二维平面内讨论. 1. 回顾凸集 可能有很多小伙伴忘了什么是凸集.凸集有很多等价的 ...
- 4.if语句--《Python编程:从入门到实践》
4.1 检查多个条件 1.使用 and 检查多个条件 2.使用 or 检查多个条件 4.2 检查特定值是否包含在列表中 使用 in 检查特定值是否在列表中 >>> req ...