例如,我有
type EmployeeDTO = {
firstName: string
lastName: string;
dateOfBirth: Date;
}
并且我想要一个实用程序类型来将所有类型的属性转换Date
为moment
type EmployeeDTO = {
firstName: string
lastName: string;
dateOfBirth: moment;
}
使用ModifyProp
下面的。这是可以玩的沙盒。
type ModifyProp<T extends {}, TFrom, TTo> = {
[K in keyof T]: Exclude<T[K], undefined> extends TFrom
? TTo
: Exclude<T[K], undefined> extends {}
? ModifyProp<T[K], TFrom, TTo>
: T[K];
};
type Foo = {
date: Date;
optionalDate?: Date;
foo: number;
bar?: string;
nested: {
date: Date;
optionDate?: Date;
foo: number;
bar?: string;
}
}
type ModifiedFoo = ModifyProp<Foo, Date, 'moment'>;
/*
{
date: 'moment';
optionalDate?: 'moment';
foo: number;
bar?: string;
nested: {
date: 'moment';
optionDate?: 'moment';
foo: number;
bar?: string;
}
}
*/
注意:上面的代码与问题中的 2 个附加测试用例一起使用,它们是:
Exclude<T[K], undefined>
而不是的原因T[K]
)Exclude<T[K], undefined> extends {})
。上面的示例代码已经演示了这 2 个测试用例。随意修改它以满足您的需要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句