我正在尝试排除Window对象上的某些特定类型声明。
我想到的第一步就是用我想要的定义子集创建另一个类型,然后看看是否可以完全重新声明Window模块。
让我们迈出第一步。
interface IgnoredWindowProps {
alert: any,
applicationCache: any
//...
}
type WindowKeySubsetUnion = Exclude<keyof Window, keyof IgnoredWindowProps>;现在,WindowKeySubsetUnion包含了未被忽略的Window声明的键的联合。我在将这些联合键重新映射到Window的实现类型时遇到了问题。我该怎么做呢?
发布于 2019-03-23 02:34:58
在标准mapped type库中有一个名为Pick<T, K> defined的TypeScript,它返回T的超类型,已知该超类型只包含K中具有键的属性。在您的示例中,您希望将Window扩展为仅在WindowKeySubsetUnion中具有键的类型
type WiderWindow = Pick<Window, WindowKeySubsetUnion>;还要注意,有一个相关的类型函数,通常称为Omit<T, K>,它没有在标准库中定义,但通常是这样呈现的:
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;如果你使用它,你可以得到你想要的类型
type WiderWindow = Omit<Window, keyof IgnoredWindowProps>;无论哪种方式都应该有效。希望这能有所帮助;祝你好运!
https://stackoverflow.com/questions/55305177
复制相似问题