我有一个由具有一组属性的对象组成的接口(interface):
interface Foo {
prop1: string,
prop2: number,
prop3?: boolean,
prop4?: object
}
有没有办法构造一个新类型 Bar
,它只包含 Foo
的可选属性,但每个属性都是必需的,例如:
interface Bar {
prop3: boolean,
prop4: object
}
最佳答案
当然。首先记下内置的 typescript 助手类型 Pick
和 Required
。然后,您可以构建另一个辅助类型,该类型将提取类型 T
的可选键:
type OptionalKeysOf<T> = {
[K in keyof T]: {} extends Pick<T, K> ? K : never;
}[keyof T];
将所有这些结合起来:
type OnlyOptionalKeysToRequired<T> = Required<Pick<T, OptionalKeysOf<T>>>;
然后,当你使用它时:
type Bar = OnlyOptionalKeysToRequired<Foo>;
// Hovering that reveals:
// type Bar = {
// prop3: boolean;
// prop4: object;
// }
关于typescript - 根据另一个类型的可选属性构造具有所需属性的新类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69034939/