TS的静态类型:
多人合作项目有更好的稳定性和开发效率
包含兼容所有JS,有渐进性
ts和js都是弱类型语言,执行时可以类型转化,但是ts是静态类型,js是动态类型
*泛型命名一般用I开头
//interface上进行函数重载
interface IGetDate{
(type:'string'):string;
(type:'boolean'):boolean;
}
Record<string,number>等价于{a:1}的类型
//数组类型表达
type IArr = number[]
// 数组变成有三种类型的元组
type IARR = Array<string | number | type1>
type IArr = [number,number,string,string]
interface IArr {
// 指定key为number的值为any
[key:number]:any
}
interface A<T,U>{
key: T;
val: U;
}
// 泛型类
class Iman<T> {
instance: T;
}
// 泛型别名
type E<T> = Array<T>
// 泛型约束
<T extends string>
// 泛型默认类型
<T = number>
//通过as在返回中进行类型断言
//类型也可以指定特别值
type a = 1|3|'aa'
复制代码
- null和undefined本身即是值也是相应的类型
- 已经是·unknown的值不能赋给任何其他值,我们也不能读取unknown身上的方法
- T[]表示泛型数组,从而可以使用T来表示item
- ts 是鸭子类型:面向接口编程而不是面向对象编程
联合类型: string | number
交叉类型: string & number
// 创建类型别名,类型别名在很多情况下可以和interface互换
type aaa = string | number
// 工具类型都是用类型别名实现的 ts写在泛型<>中的typeof和js中不同,是在编译时就执行,js的typeof只有运行时才执行
[Aa,Ab]: Parameters<type A>
复制代码
// 会对type中每一个做?处理
const xiaoMing: Partial<Person> ={age:13}
// 也可以形成一个新type
type a = Partial<A>
联合交叉类型
联合类型 联合类型 | 表示一个值可以是几种类型之一 交叉类型 & 多种类型叠加在一起成为一种类型,它包含了所需的所有类型的特性
类型保护与类型守卫
类型保护 访问联合类型时,处于程序安全,仅能访问联合类型的交集部分
类型守卫 定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域 返回布尔值
高级类型
函数的返回值类型
工程应用
webpack