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"
]
}