Ts中的高级使用
目录
partial
作用:将传入属性变为可选项
源码:
type Partial<T> = { [P in keyof T]?: T[P] };
用例:
interface Foo {
name: string;
age: number;
}type B = Partial<Foo>;
// 最多只能够定义 name, age 中的属性(可以不定义)
let b: B = {
name: '1',
age: 3,
};
Required
作用:将传入的属性变为必选项
源码:
type Required<T> = { [P in keyof T]-?: T[P] };
Pick
作用:取出一系列k的属性
源码:
type Pick<T, K extends keyof T> = { [P in K]: T[P] };
用例
// 相当于: type PickUser = { age: number; name: string; }
type PickUser = Pick<User, "age" | "name">
Exclude (排除)
作用:过滤出前者独有的属性(排除后者所有属性)
源码:
type Exclude<T, U> = T extends U ? never : T;
const str: Exclude<'a' | '1' | '2', 'a' | 'y' | 'z'> = '1';
Omit
作用:把后者存在的属性,从前者中剔除
用例:
interface User {
id: number;
age: number;
name: string;
}
// 相当于: type OmitUser = { age: number; name: string; }
type OmitUser = Omit<User, 'id'>;
Record
作用:以 typeof 格式快速创建一个类型,此类型包含一组指定的属性且都是必填
用例:
type Coord = Record<'x' | 'y', number>;
// 等同于
type Coord = {
x: number;
y: number;
}