typescript

143 阅读2分钟

1、TS核心

1、类型

  • boolean : 布尔值
  • number : 数字
  • string :字符串
  • Array<T> | <T>[]: 数组
  • [string, number]: 元组
  • enum: 枚举,enum Color {Red, Green}
  • Any:
  • Object: 除number、string、boolean、symbol、null、undefined;
  • null, undefined: 所有类型的子类型,可赋值给任意类型;
  • unknown: 类似any, 但不能调用任何方法;
  • void: 表示不关注返回值的类型;
  • never:无法正常返回的类型;

2、运算符

  • !:非空断言运算符,明确不反悔null或undefined时使用;
  • ?: 可选链运算符,左侧表达式null或undefined时停止执行;
  • ??:空值合并运算符,左侧为null或undefined时返回右侧表达式;
  • _ : 数字分隔符, 方便阅读,编译时会去除;

3、操作符

  • keyof: 获取类型所有键值,如限制访问对象key的合法化;
  • typeof: 获取对象或实例的类型;
  • in: 枚举类型进行遍历;

4、泛型

  • 指定默认类型: type TItem<T = any> = {type: T}
  • 约束泛型: <T extends Type>
  • 泛型条件: <T extends U ? X : Y>, T为U的子类型 T= X, 否则 T= Y;
  • 泛型推断:T extends {t infer Test} ? Test : string

5、泛型工具

  • Partial<T>: 将泛型中的全部属性变为可选值;

type Partial = { [P in keyof T]?: T[P] }

  • Record<K, T>: 将K中所有的属性之转换为T类型;

type Record<K, T> = { [k in K]: T }

  • Pick<T>: 将T类型中K键列表提取出来,生成新类型;

type Pick<T, K extends keyof T> = { [P in K]: T[P] }

  • Exclude<T, U>: 在T类型中去除T类型和U类型的交集;

type Exclude<T, U> = T extends U ? never : T

  • Extract<T, U>: 获取T类型和U类型的交集;

type Extract<T, U> = T extends U ? T : never

  • Omit<T, K>: 去除T类型中K包含的键值对;

type Omit<T, K> = Pick<T, Exclude<keyof T, K>>

  • ReturnType<T>: 获取T函数返回值类型;
  • Required<T>: 将T类型中的所有属性设置为必选项;

type Required = { [P in keyof T]-?: T[P] }

  • Readonly<T>: 将T类型中的所有属性设置为只读;

type Readonly = { readonly [P in keyof T]: T[P] }

6、命名空间

declare namespace TName { 
    interface Iiter {};
    type Ttype = {};
}

7、特殊说明

  • keyof any = number | string | symbol
  • interace PK type: type拓展语法简单、可使用|和typeof等; interface可重复定义添加属性, 例如给Window对象添加属性;

2、TS配置: tsconfig.json

编译器配置项说明

{
extends: "",  // 另一个配置文件的路径 
    "compilerOptions": {    // 编译器配置
        "module": "commonjs",
        "noImplicitAny": true,
        "removeComments": true,
        "preserveConstEnums": true,
        "sourceMap": true
    },
    "files": [],    // 指定包含绝对或相对路径的文件列表
     "include": [
        "src/**/*"
    ],
    "exclude": [ // 默认情况下会排除node_modules,bower_components,jspm_packages和<outDir>目录
        "node_modules",
        "**/*.spec.ts"
    ]
}