Typescript

112 阅读3分钟

概览

  • npm init 或tsc --init 生成tsconfig.json
  • npm i ts-node -g
  • npm init --y 生成package.json
  • npm i @types/node -D
  • tsc -w---编译生成js文件
  • ts-node index.ts --直接输出
  • webpack:npm i ts-loader -D
  • 联合类型 |
  • 类型断言 as
  • 交叉类型 &
  • 类继承 extends
  • 约束 implements
  • private只能在类内部中使用
  • protected 只能给子类或类内部使用
  • public 不限制范围
  • 抽象类abstract,只描述不实现,不能创建抽象类的实例化
  • 枚举类型enum,const声明的枚举会被编译成常量,普通枚举会被编译成对象
  • 类型推断,若只声明类型不赋值,则推断为any类型
  • 类型别名 type,无法继承,重名不会合并。高级用法:

image.png

  • never 永远无法到达的类型
  • symbol每次调用都是注册的不同内存地址。但是symbol.for("zz")===symbol.for("zz")//true,这个会沿用上一个key的内存地址
  • 泛型是定义类型是什么类型,any是定义变量是什么类型
  • 泛型约束 :

image.png

  • 泛型约束keyof:用extends keyof 可推断出类型的联合类型
  • 命名空间namespace(里面的方法和变量必须导出才能用),可以用于不同移动端的条件编译
  • 声明文件 npm i @types/插件 -D 安装了才有代码提示
  • mixins 混入,对象混入:合并几个对象到一起,一般浅拷贝,structuredClone(a),深拷贝node.js18以上可用。类的混入:??
  • 装饰器 decorator,在类上边加上@Base,可以不破坏calss的结构添加属性和方法,polyfill写法:Base(类的实例函数);装饰器工厂,可以在Base里面自定义参数名称:

image.png

  • 发布订阅模式(设计模式)
  • 类型守卫

类型大小级

image.png

unknow和any类型top type

  • 只能赋值给自身或者any类型,它不可以读任何属性和方法
  • any可以调任何属性和方法

Object、object、{}

  • Object:对象
  • object:用于筛选泛型的引用类型
  • {}: 对象类型,创建后不能进行属性的增加和修改

类型数组

普通数组

第一种方式:
let arr:number[]=[1,2,3,]---在类型的后面加上[]即可
let arr:boolen[]=[true,false]---在类型的后面加上[]即可

第二种方式:
let arr:Array<boolen>=[true,false]---利用泛型在<>内协商对应的类型即可

对象数组

interface A={
name:string
age?.:string

let arr:A[]=[{name:'小黄',},{name:'小张'}]
}

反转

//传入参数不管是number类型还是boolen类型,两次反转后为boolen类型
let fn = function(type:number | boolen):boolen{
    return !!type
}
fn(1)

获取元组长度(易错)

image.png

  • 底层原理

  • 元组(Tuple)类型的 length 是字面量类型
  • 当你定义 [number, boolean] 时,TypeScript 内部会把它表示为一个固定长度的数组类型,并附带 length 属性。
  • 当你访问 arr['length'] 时,TypeScript 会直接返回该元组的长度,如 2,而不是普通的 number

enum 枚举反向查找

  • 先将456赋值给success变量,再利用Type[456]查找对应的key

image.png

迭代器

for...of.

//对象不可用,因为对象身上没有Symbol.iterator属性
for (let value of Arr){
}

- keyof:提取该类型所有键名的联合类型。

装饰器

装饰器可以不访问和改类内部的结构,在外部定义方法和变量加上去
const Base=()=>{


}
@base
class http{
}


defineProps与默认值

image.png