首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从类型定义中排除某些属性

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

Stack Overflow用户
提问于 2019-03-23 01:44:45
回答 1查看 30关注 0票数 0

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

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

让我们迈出第一步。

代码语言:javascript
复制
interface IgnoredWindowProps { 
    alert: any,
    applicationCache: any
//...
}

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

现在,WindowKeySubsetUnion包含了未被忽略的Window声明的键的联合。我在将这些联合键重新映射到Window的实现类型时遇到了问题。我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-23 02:34:58

在标准mapped type库中有一个名为Pick<T, K> defined的TypeScript,它返回T的超类型,已知该超类型只包含K中具有键的属性。在您的示例中,您希望将Window扩展为仅在WindowKeySubsetUnion中具有键的类型

代码语言:javascript
复制
type WiderWindow = Pick<Window, WindowKeySubsetUnion>;

还要注意,有一个相关的类型函数,通常称为Omit<T, K>,它没有在标准库中定义,但通常是这样呈现的:

代码语言:javascript
复制
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

如果你使用它,你可以得到你想要的类型

代码语言:javascript
复制
type WiderWindow = Omit<Window, keyof IgnoredWindowProps>;

无论哪种方式都应该有效。希望这能有所帮助;祝你好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55305177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档