2021-09-25 ts-内置模块的使用和实现

2021-09-25  本文已影响0人  FConfidence

1. 联合类型 |, 交叉类型

let a: string | number = "123"; // 变量a的类型既可以是string,也可以是number
a = 123;

// 交叉类型
interface Student {
  classNo: string;
}

interface Person {
  name: string;
}

const a: Student&Person  = {
  classNo: "123",
  name: "fe"
}

2. keyof

interface Person {
  name: string;
  age: number;
}

type PersonKeys = keyof Person; // 等同于 type PersonKeys = 'name' | 'age'

const p1: PersonKeys = "name"; // 可以
const p2: PersonKeys = "age"; // 可以
// const p3: PersonKeys = 'height' // 不能将类型“"height"”分配给“name | age”

3. Record用于属性映射

type PersonMap = Record<string, Person>;
const me: PersonMap = {
  confidence: {
    name: "FE",
    age: 18,
  },
};

// Record的的实现
type MyRecord<K extends string|number|symbol, T> = {
  [P in K]: T
}

4. Partial (部分的; 不完全的)

type PartialPerson = Partial<Person>;
const partialPersonInstance: PartialPerson = {
  name: '12',
  // 或者只有age属性, 或者两个属性都不存在
};

// partial的内部定义
type MyPartial<T> = {
  [K in keyof T]?: T[K]
}

5. Required(必须的) 将一个定义中的属性全部变成必选参数

type RequiredPerson= Required<Person>;
const requiredPersonInstance: RequiredPerson = {
  name: "12",
  age: 20,
};

6. ts中可以选择一个原来的接口中一部分的属性定义

type PickPerson = Pick<Person, 'name'>;
const pickPersonInstance: PickPerson = {
  name: 'FE',
  // age: 20, // 不能有age属性, 会报错
};

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

7. readonly 让一个定义中的所有属性都变成只读参数

type ReadOnlyPerson = Readonly<Person>;
const readPersonInstance: ReadOnlyPerson = {
  name: '123',
  age: 20,
};

// readPersonInstance.name = '234'; // error

8. exclude 排除"联合类型" 中一部分的内容

type ExcludePerson = Exclude<PersonKeys, "name">;

const excludePersonKeys: ExcludePerson = "age"; // 只能为age

// T extends U 就判断是否’name’ | ‘age’,  有 name, 有name就返回never,就代表将其排除
type MyExclude<T, U> = T extends U ? never : T;

9. Omit 省略: 将接口或者类型的键值对删除一部分

type SomeOfPerson = Omit<Person, 'name'>;

const omitPersonInstance: SomeOfPerson = {
  age: 20,
  // name: 1, // 不能有name属性 会报错
};

type MyOmit<T, K extends string|number|symbol> = {
  [P in Exclude<keyof T, K>]: T[P]
}
上一篇 下一篇

猜你喜欢

热点阅读