TypeScript | 青训营笔记

74 阅读2分钟

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