概览
- 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,无法继承,重名不会合并。高级用法:
- never 永远无法到达的类型
- symbol每次调用都是注册的不同内存地址。但是symbol.for("zz")===symbol.for("zz")//true,这个会沿用上一个key的内存地址
- 泛型是定义类型是什么类型,any是定义变量是什么类型
- 泛型约束 :
- 泛型约束keyof:用extends keyof 可推断出类型的联合类型
- 命名空间namespace(里面的方法和变量必须导出才能用),可以用于不同移动端的条件编译
- 声明文件 npm i @types/插件 -D 安装了才有代码提示
- mixins 混入,对象混入:合并几个对象到一起,一般浅拷贝,structuredClone(a),深拷贝node.js18以上可用。类的混入:??
- 装饰器 decorator,在类上边加上@Base,可以不破坏calss的结构添加属性和方法,polyfill写法:Base(类的实例函数);装饰器工厂,可以在Base里面自定义参数名称:
- 发布订阅模式(设计模式)
- 类型守卫
类型大小级
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)
获取元组长度(易错)
-
底层原理
- 元组(Tuple)类型的
length是字面量类型 - 当你定义
[number, boolean]时,TypeScript 内部会把它表示为一个固定长度的数组类型,并附带length属性。 - 当你访问
arr['length']时,TypeScript 会直接返回该元组的长度,如2,而不是普通的number。
enum 枚举反向查找
- 先将456赋值给success变量,再利用Type[456]查找对应的key
迭代器
for...of.
//对象不可用,因为对象身上没有Symbol.iterator属性
for (let value of Arr){
}
- keyof:提取该类型所有键名的联合类型。
装饰器
装饰器可以不访问和改类内部的结构,在外部定义方法和变量加上去
const Base=()=>{
}
@base
class http{
}