从类型定义中排除某些属性

时间:2019-03-22 17:44:45

标签: typescript

我正在尝试排除Window对象上的某些特定类型声明。

我想到的第一步就是用我想要的定义子集创建另一个类型,然后查看是否可以完全重新声明Window模块。

让我们迈出第一步。

interface IgnoredWindowProps { 
    alert: any,
    applicationCache: any
//...
}

type WindowKeySubsetUnion = Exclude<keyof Window, keyof IgnoredWindowProps>;

现在,WindowKeySubsetUnion包含Window声明中未被忽略的键的并集。我在将那些联合键重新映射到Window的实现类型时遇到麻烦。我该怎么办?

1 个答案:

答案 0 :(得分:0)

在标准TypeScript库中有一个名为Pick<T, K> mapped typedefined,它返回一个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>>;

无论哪种方法都可以。希望能有所帮助;祝你好运!