我正在尝试排除Window
对象上的某些特定类型声明。
我想到的第一步就是用我想要的定义子集创建另一个类型,然后查看是否可以完全重新声明Window
模块。
让我们迈出第一步。
interface IgnoredWindowProps {
alert: any,
applicationCache: any
//...
}
type WindowKeySubsetUnion = Exclude<keyof Window, keyof IgnoredWindowProps>;
现在,WindowKeySubsetUnion
包含Window
声明中未被忽略的键的并集。我在将那些联合键重新映射到Window的实现类型时遇到麻烦。我该怎么办?
答案 0 :(得分:0)
在标准TypeScript库中有一个名为Pick<T, K>
mapped type的defined,它返回一个T
的超类型,该超类型仅包含{{ 1}}。在您的情况下,您希望将K
扩展为仅在Window
中具有键的类型:
WindowKeySubsetUnion
还要注意,有一个相关的类型函数,通常称为type WiderWindow = Pick<Window, WindowKeySubsetUnion>;
,它在标准库中没有定义,但通常是这样呈现的:
Omit<T, K>
如果使用它,您可以将所需的类型设置为
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
无论哪种方法都可以。希望能有所帮助;祝你好运!