这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
一、本堂课重点内容:
- 本堂课的知识要点有哪些?
- TypeScript 历史及定义解析
- TypeScript 优势解读
- TypeScript 练习工具
- 联合交叉类型
- 类型保护与类型守卫
- Merge 函数类型实现
- 函数返回值类型
- TypeScript 工程应用
二、详细知识点介绍:
ts定义
- js是动态弱类型语言(执行时做类型匹配),ts是静态弱类型语言(编译时做类型匹配),类型匹配时弱类型匹配可以支持1+‘1’,ts有多个生态支持(动态类型:执行时才匹配变量类型/编译)
- TypeScript 是 JavaScript 的语法超集,它添加了静态类型,支持渐进式引入与升级。
- 优势:增强可读性(基于语法解析TSDoc)/可维护性(编译阶段暴露大部分错误),利于多人合作大项目
基本语法
- 基础语法,比js加了类型,在变量名之后➕冒号类型
const w:number=1;- 基础类型:string/number/boolean/null/undefined,any任意类型,
- 自定义对象类型前加I,
interface IByteDancer { readonly jobId:number;//只读属性 name: string; sex: 'man'|'woman'; hobby?: string;//可选属性 [key: string]: any;//任意属性:约束所有对象属性都必须是该属性的字类型 } const bytedancer: IBytedancer = { jobId: 90, name: 'Lin', sex: 'man', hobby: 'tennis', } bytedancer.platform= 'data';//任意属性标注下可以添加任意属性- 好多接口interface
- 函数类型
- 函数支持接口化,可以写成Ifunction(右上角)
- 函数类型声明存在类型推断
- 数组
number[],Array<string|number|Record<string,number>>,元组,接口 - ts的类型补充:
- 空类型
type IEmptyFunction=()=>void, - 任意类型
type IAnyType=any, - 枚举类型
enmu EnumEx{ add='+',mult='*'}支持枚举的正反映射, - 泛型
type IGetRepeatArrR=<T>(target:T)=>T[]使用时候根据传入确定类型- 泛型约束和泛型参数默认类型
- 空类型
- 用type定义类型别名
type IObjArr = Array<key:string;[objKey:string]:any;} - 类型断演?
function keyBy<T extends IObjArr>(objArr:Array<T>){ //未指定类型是,result类型为{} const result=objArr.reduce((res,val,key)=>{ res[key]=val; return res; },{}); //返回空object //通过as关键字,断言result类型为正确类型 return result as Record<string ,T>; } - 字符串/数字 字面量 用|来固定值
type IDonTag='html'|'body'|'div';
高级类型
联合/交叉类型
定义两种Ibook类型,type booklist=Array<类型1 | 类型2>
联合类型:IA | IB,几种类型之一
交叉类型:IA & IB,几种类型叠加为一种类型,包含所需所有类型的特性
type booklist=Array<{作者}&({类型1} | {类型2})> 差异&common
类型保护/守卫
ts中,访问联合类型时,仅能访问联合类型的交集
类型守卫:定义一个函数,返回值是类型谓词,生效范围是子作用域,联合类型+类型保护=自动类型推断
替代了if-else的操作
函数的返回值delayCall extends关键字
extends随泛型出现时,可以类比三元表达式
infer R是整体,类型推断将函数扩展。
工程应用
浏览器web
webpack构建器
webpack loader - 配置 tsconfig.js - 运行webpack启动/打包 - loader处理ts时,会编译和类型检查
awesome
babel
nodejs
code.ts - TSC - code.js
安装node,npm - 配置 tsconfig.js - npm安装tsc - 用tsc运行编译得到js文件
三、实践练习例子:
- 泛型约束
四、课后个人总结:
-
本章有什么知识点不容易掌握?
ts的高级语法,之前基础差没有习惯type的表达
类型守卫没听懂,in和?关键字
-
什么地方容易与其他内容混淆?
泛型限定和泛型推断
五、引用参考:
-
我参考了哪些外部博客/笔记/文章?
学类库