1. Pick
语法:Pick<Type, Keys>
- 通过从
Type
中选取一组属性Keys
(字符串字面或字符串字面的并集)来构造一个类型。- 就是在已经定义好的Type中选取一些key,组成一个新的Type类型
pick
两个类型变量:
1.表示选择谁的属性
2.表示选择哪几个属性(传入属性名,只能是第一个 类型变量中存在的属性)
interface Props{
id:string
title:string
children:number[]
}
type PickProps= Pick<Props,'id'|'title'>
生成的新类型,只有id,title
两个属性类型 相当于
interface PickProps{
id:string
title:string
}
2. Omit
语法:Omit<Type, Keys>
- 通过从
Type
中选择所有属性然后删除Keys
(字符串字面或字符串字面的并集)来构造一个类型。与Pick相反。- 在已经定义的对象中删除一些,留下剩下的组成新的类型
Omit两个类型变量:
1.表示选择谁的属性
2.表示排除哪几个属性(传入属性名,只能是第一个 类型变量中存在的属性)
interface Props{
id:string
title:string
children:number[]
}
type PickProps= Pick<Props,'id'|'title'>
生成的新类型,除了id,title
两个属性类型都有,相当于
interface PickProps{
children:number[]
}
3. Exclude(排除/不包括)
返回没有含有的那个
Exclude<T,U>
从第一个联合类型参数中,将第二个联合类型中出现的联合项全部排除,只留下没有出现过的参数。差集
type A = "age" | "name";
type B = "like" | "name";
type C = Exclude<A, B>;
相当于
type C ='age'
type A = "age" | "name";
type B = "age" | "name" | "height";
type C = Exclude<A, B>;
相当于
never
type T2 = Exclude<string | number | (() => void), Function>;
相当于
type T2 = string | number
4. Extract (提取/包括)
返回含有的那个
Extract<T,U>
提取T中所有能够赋值给Union
的属性,将这些属性构成一个新的类型传入两个泛型,如果
T
是U
的子类型则返回,不是则返回 never
type Extract<T, U> = T extends U ? T : never;
type A = "age" | "name";
type B = "like" | "eat";
type C = Extract<A, B>;
相当于 type C = nerver
type A = "age" | "name";
type B = "like" | "eat" | "name";
type C = Extract<A, B>;
相当于 type C = "name"
5. Partial(设为可选)
就是将某个类型中的属性全部变为可选项
?
interface Todo {
title: string;
description: string;
}
function updateTodo(todo: Todo, fieldsToUpdate: Partial<Todo>) {
return { ...todo, ...fieldsToUpdate };
}
const todo1 = {
title: "organize desk",
description: "clear clutter",
};
const todo2 = updateTodo(todo1, {
description: "throw out trash",
});
暂时先总结这几个,后续再补充~