常用的内置方法使用掌握以下方法让我们写TypeScript事半功倍,通过一些类型转换就可以得到自己想要的类型,而不需要重新定义 。
PIck<T,K>从T集合里面获取K的子级
type Type = {id : number;age: number;name: string;}// SubType的类型是{id:number; name: string;}type SubType = Pick<Type, 'id' | 'name'>;
keyof获取一个类型的所有键值
type Person = {name:string;age:number}type Key = keyof person // 'age' | 'age'
Partial<T>将所有属性变为可选 。
我们定义某个对象的类型的时候,一开始大部分都会定义成必传的 。之后,在另一个地方使用需要将其变成可选,这是便可以使用Partial定义一个新类型,而不改变之前的类型 。
interface Todo {title: string;description: string;}//TodoPartial = {name?:string;age?:number}type TodoPartial = Partial<Todo> // description已经成为可选键值,所以不写也可以const todo: TodoPartial = {title: 'sanmu'}
Required和Partial相反,将可选全部变为必填
interface Props {a?: number;b?: string;} const obj: Props = { a: 5 };// Property 'b' is missing in type '{ a: number; }' // but required in type 'Required<Props>'.// b没有传,报错const obj2: Required<Props> = { a: 5 };
Readonly<T>将所有的键值对设置为只读
interface Todo {title: string;}const todo: Readonly<Todo> = {title: "Delete inactive users",};// Cannot assign to 'title' because it is a read-only property.// 因为title是只读,所以报错todo.title = "Hello";
Exclude<T,K>从T集合中,剔除T类型和U类型的交集,返回剩余部分
type T = Exclude<'a' | 'b' | 'c', 'a'> // 'b' | 'c'
Omit<T,K>从T集合中,过滤掉K的键值对
interface Todo {title: string;description: string;completed: boolean;createdAt: number;}type TodoInfo = Omit<Todo, "completed" | "createdAt">;// TodoInfo 只有title和descriptionconst todoInfo: TodoInfo = {title: "Pick up kids",description: "Kindergarten closes at 5pm",};
Record<T,K>构造一个对象类型,T表示对象的属性值,K标识对象的属性值
interface CatInfo {age: number;breed: string;}type CatName = "miffy" | "boris" | "mordred";// cats的keys是 "miffy" | "boris" | "mordred",value是{ age,breed}const cats: Record<CatName, CatInfo> = {miffy: { age: 10, breed: "Persian" },boris: { age: 5, breed: "Maine Coon" },mordred: { age: 16, breed: "British Shorthair" },};
NonNullable去除null和undefined 。
开发中经常其他人定义了某个类型是包含null或者undefined,可是某些场景并不需要空值,这个时候不想重新写一个新类型,便可以使用这个
type T0 = NonNullable<string | number | undefined>;// T0 = string | numbertype T1 = NonNullable<string[] | null | undefined>;// T1 = string[]
Parameters<T>获取函数的参数 。
比如函数1的第一个参数的类型和函数2的第一个参数的类型是一样的,可以通过这个方法获取函数2的参数赋予给函数1的参数 。
// T0 = [] 函数参数是空值type T0 = Parameters<() => string>;// T1 = [s: string]type T1 = Parameters<(s: string) => void>;declare function f3(arg: { a: number; b: string }): void;// T3 = [arg: {a: number;b: string;}]type T3 = Parameters<typeof f3>;// 将f4的第一个参数赋予f5函数的第1个参数declare function f4 (a: number, b: string ): void;// T4 = [a: number, b: string]type T4 = Parameters<typeof f4> // a: numberdeclare function f5(a: T4[0],b:string): void
ReturnTypeParameters获取的函数的参数类型,ReturnType则是获取函数的返回值的类型
// T0 = stringtype T0 = ReturnType<() => string>; // T1 = voidtype T1 = ReturnType<(s: string) => void>;// T2 = unknowntype T2 = ReturnType<<T>() => T>;declare function f1(): { a: number; b: string };//T4 = { a: number; b: string;}type T4 = ReturnType<typeof f1>;
推荐阅读
- 有品位的女人,有以下几种行为 品味女人
- 如何下载滴滴出行?网约车司机端下载方法对比,总有一种你可以下载
- |职场上的小人,一般都会有以下3个特征
- 求职|职场上,领导不重视自己,主要有以下原因,领导却不在意
- Intel|不抢7nm以下市场 Intel靠22nm芯片代工照样赚钱
- 只有掌握了正确的健身方法 才能有效的帮助你达到锻炼的目的
- 游泳中掌握水感是效率的关键 掌握技能省力又健康
- 长跑虽然好 但不是每个人都适合掌握要领 长跑有益于身心健康
- 华为|35岁中年危机不存在的!华为30岁以下员工只占28%
- 饮食|你的颜值高不高,主要取决于以下四点,我占了两个,你呢?