1. 为什么要学
1). 缩小bug,提高质量
强类型、强语言【枚举、接口、泛型...】,代码更强壮,语法等异样,编译阶段能“提前”报错
2). 面向对象
反对面向对象,软件设计与工程化更为成熟,更容易做单元测试、继续集成等
3). 提高效率
- 语言简略易学,尤其是有C#、java根底的后端同学
- 相比js,代码简洁易读,大型项目实现雷同的性能代码量更少
- ide反对更为敌对,如:智能提醒、变量强关联、重构等
- 绝大部分罕用类库曾经反对智能提醒
4). 业内趋势
- GitHub年度报告:TypeScript超过C++成第四大语言
- ts成为腾讯2020年增速第二的语言,仅次于go
代表作品github上应用ts得repo-按star降序
- vscode
- node下一代-deno
- angular
- nest
- apollo-client
- ....不一一举例
2. 练级攻略
根底语法
- typescript入门教程:内容少,易上手
- 官网手册:绝对全面
编码格调
- 谷歌-ts代码格调领导
外围性能
- tsconfig.json
- 面向对象
- 泛型
- 编译 -> 包大小
软件工程
- 单元测试
- 重构
- 设计模式
- 面向对象-Java编程思维
3.实用场景
- 适宜:1)框架、类库组件开发;2)业务开发。尤其适宜框架、类库组件开发,倡议先将类库组件ts,逐渐向业务开发推广
4. 举荐ide
老手 webstorm > vscode,新手反之
webstorm特点
- 长处:开箱即用(无需装置插件)、易于重构【集体感觉十分重要】
- 毛病:免费、没idea成熟
- 长期:还是要被VSC碾压的
5. 举荐书籍
TypeScript入门与实战
- 举荐级别A,理由:介绍全面,适宜入门及进阶
深刻了解TypeScript
- 举荐级别B,理由:入门及编译简介
6. 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" ]}
7. 认识
ts将会是web前端开发首选语言
ts是js的超集,不是替代物
- 写好ts,还得先学好js
- 再学习ts语法及面向对象设计
- 关注ts编译原理及编译后果
不得已存在的any类型
- 产生问题:any类型,不反对强类型、智能提醒等,相当于把ts回退到js
- 问题起因:1)兼容,老代码及内部依赖如WEBAPI返回的参数类型,在不同浏览器或不同版本的雷同浏览器都不一样,只能定义为any类型;2)类库不健全,lid.d.ts不全面,导致局部属性、办法的类型形容不残缺,得再类型定义后增加" | any" 组合类型能力满足需要,不得不用any类型
- 改良方法:有明确的复合类型,能够通过组合类型来定义类型,如: age: int | any,比纯any,IDE能增加int类型相干的智能提醒和语法报错
复合类型没必要
- 穿插类型、索引类型、映射对象类型,意义不大,实用场景少,易滥用,明显降低代码可读性
- js的问题是语言太随便,导致很多程序员把大量的工夫节约在语法学习上
面向对象不彻底
- 不反对重载
- 办法默认是public修饰符
面向对象的边界
- 服务端开发,如应用nestjs等框架,倡议所有代码都面向对象,甚至能够借鉴java spring,应用面向接口编程,解决依赖倒置的需要
- 客户端开发,局部场景下,适度应用面向对象,可能会导致包体积变大,须要注意
8. 业内实际
- 整洁的js代码
- 整洁的js代码-中文翻译
- 将超过5000万行JS代码迁徙到TypeScript,咱们失去的10大见解
- Typescript Best Practices
- TypeScript系列(五)最佳实际