这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
01 TS发展历史
JS和TS
- 动态类型:执行过程中才能确定一个类型的匹配。
- 静态类型:会
提前检验-类似python、java先走一遍编译过程才执行。 - 弱类型:类型转换,隐性类型转换
TS:可读性。ide:一段时间以后再看代码可以大概看明白作用。写代码相当写文档。
编译器推荐-vscode、在线编译器
02 基础语法
- 对象大部分自定义:一般开头
大写I,用于与对象、类区分 - interface:只读关键字readonly不可在对象初始化外赋值。-关键字 除了可选属性可缺省,必有属性必须存在。
函数类型
函数重载-与函数定义不同
函数定义只有定义操作相当于赋值,错误一中,修改:将IGetDate的返回类型范围扩大。any-任意类型关键字
数组类型
Record-对象类型简写 一般用第一二种 第四种:函数、对象、void等
补充类型
- type:
用来描述对象或函数的类型,其作用就是给类型起一个新名字,可以作用于原始值(基本类型),联合类型,元组以及其它任何你需要手写的类型,在ts编译成js后,所有的接口和type 都会被擦除掉。 与interface相似但有区别
TS泛型
- 不确定类型
- 类、泛型接口、泛型别名尖括号在后面
- 函数定义尖括号是在前面
泛型约束//有限定
extends-限制string;函数泛型,注意尖括号位置
=默认类型-类型别名
类型别名、类型断言
- 类型断言-array转换为object?
- as断言 很明确类型
字符串/数字 字面量类型
或的关系。
03 高级类型
通过各种基础数据类型做高级类型定义
- case一
联合/交叉类型
具有重复声明、且类型只有history和story
- 改进:
类型保护与类型守卫
js上可以、ts不可以,ts只可以使用公共部分
修改:
- 类型谓词is
- 当返回值为true时候,输入时候一定是IA类型。geiIsIA返回值是个布尔值
- Q:不太理解return !!(arg as...
只有两种类型完全没有任何相同点时候使用 类型守卫。
case 二
安全实现-子集不污染合并、参数入参必须正确
- 判断子集:可能存在,可能不存在
1、通过泛型方式实现
高级类型:基础类型通过语法表达
- IPartial:T是IPartial的子集
函数返回类型
输入泛型、输出泛型函数
作用:用来取函数类型!取到子类型的判定类型
泛型推断
- extends出现在定义时候是表达类型推断,和三等号等价
- infer:类型指代,'infer R'是整体
04 工程应用
- 1.web-webpack应用
处理js文件,将ts文件转换为js文件让webpack处理
- 2.node.js应用