我正在使用库中自动生成的类型.这些类型包含所需的所有值,而我想将其中一些标记为可选.我知道在typescript中使用泛型是可能的,但不确定如何做到这一点.下面是我希望发生的一个例子:
这是一个嵌套类型的示例:
interface Person {
name: string;
hometown: string;
nickname: string;
data:{
address:string,
phone:number
}
}
我希望调用以下内容,使根类型中的name
属性和嵌套类型中的address
属性成为可选的:
type TransformedPerson = MakeOptional<Person,{name:string, data:{address:string}}>
或:
type TransformedPerson = MakeOptional<Person,"name"|"data.address">
希望看到创建以下类型:
/*
type TransformedPerson = {
name?: string;
hometown: string;
nickname: string;
data:{
address?:string,
phone:number
}
}
*/
我已经看到了use Partial in nested property with typescript的一个示例,它使根对象中的属性成为可选的,但它不适用于嵌套类型:
type RecursivePartial<T> = {
[P in keyof T]?: RecursivePartial<T[P]>;
};
type PartialExcept<T, K extends keyof T> = RecursivePartial<T> & Pick<T, K>;
type TransformedType = PartialExcept<Person, "name"> /// This works only for root type
type TransformedType = PartialExcept<Person, "name"|"data.address"> /// throws error