在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 交叉类型-&将多个类型合并成一个大类型
interface Bird { name: string, fly(): void } interface Person { age: number, talk(): void; } type BirdMan = Bird & Person; let bm: BirdMan = {name: 'lee', fly() {}, age: 1, talk(){}} 2. 获取对象类型-typeoflet user = {name: 'lee', age: 1, talk() {}}; type User = typeof user; // 相当于 {name: string, age: number, talk():void} 3. 通过索引访问类型的自类型type Parent = { name: string, son: { name: string, age: number } } // 注意不能使用.运算符 let son: Parent['son'] = {name: 'lee', age: 1}; 4. 限制类型的属性选项-keyoftype Stu = { score: number, name: string } type StuKey = keyof Stu; // 'score'|'name' function getStuValue(stu: Stu, key: StuKey) { return stu[key] } let stu = {score: 90, name: 'lee'}; // ❌ Argument of type '"ddd"' is not assignable to parameter of type '"score" | "name"'. getStuValue(stu, 'ddd'); 5. 映射类型-keyof+intype Person1 = { name: string, age: number, gender: boolean } //PersonMap是从Person1映射的类型,该类型各属性都变为可选 type PersonMap = { [key in keyof Person1]?: Person1[key] } let p1:PersonMap = {name: 'lee'}; 6. 内置的类型工具所有的工具的第一个参数为具体的类型;可以是以下类型(interface, enum, class, type) 1. Partical将必须项转变为可选项。
// 原理 type Partival<T> = {[key in keyof T]+?: T[key]}; 示例: interface PersonA { user: string } type NewPersonA = Partial<Person>; // {user?: string} 2. Required将可选项变为必须项
// 原理 type Required<T> = {[key in keyof T]-?: T[key]} 示例: class PersonB { name?: string } type NewPersonB = Required<PersonB>; // 测试用例 let perB: NewPersonB = {name: 'lee'}; 3. Readonly修改所有属性为只读属性
// 原理: type Readonly<T> = {readonly [key in keyof T]: T[key]} 示例: type PersonC = { age: number } type NewPersonC = Readonly<PersonC>; let perC: NewPersonC = {age: 10}; perC.age = 12; // ❌ 4. Pick从大类型中挑选小类型
// 原理: type Pick<T, Key extends keyof T> = {[key in Key]: T[key]} 示例: interface PersonD { gender: boolean, intersets: "ball" | "sing", age: number } type NewColor = Pick<PersonD, 'gender'|'age'>; let newC: NewColor = {gender: true, age: 10}; 7. 内置的条件类型工具1. Excluede获取第一个参数相对第二个参数的补集
type E1 = Exclude<string|number|boolean, number>; let e1: E1 = 'true'; let e2: E1 = true; 2. Extract从第一个参数中抽取第二个参数指定的类型
type E2 = Extract<string|boolean|number, number>; let e21: E2 = 1; 3. NonNullable自动排除null/undefined
type E3 = NonNullable<null|undefined|string>; let e3: E3 = 'qqq'; 4. ReturnType获取函数的返回值的类型
function test() { return {name: 'lee'}; } type NewType = ReturnType<typeof test>; let newT:NewType = {name: 'ddd'} ; 应用: Redux 5. InstanceType获取类实例的类型
class User1 { name: string; constructor(name: string) { this.name = name; } } type NewUser = InstanceType<typeof User1>; let newUsr: NewUser = {name: 'ddd'}
|
请发表评论