gpt4 book ai didi

typescript - 如何通过扩展从 TypeScript 接口(interface)中删除字段

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:31 25 4
gpt4 key购买 nike

假设有一个我无法控制的界面:

interface Original {
name: string;
size: number;
link: SomeType;
}

我想扩展这个接口(interface),但实际上删除 link 所以我最终得到一个有效的新接口(interface):

interface OriginalLite {
name: string;
size: number;
}

我该怎么做?

最佳答案

您可以使用 mappedconditional类型来实现这一点。通常我们将您尝试做的事情称为 Omit :

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>

(对于 TS3.5+,Omit 实用程序类型 is included in the standard library ,因此您不必再自己定义它)

所以 Omit<T, K>T基本相同但没有 K 中的任何属性.您可以执行以下操作来创建一个新的 interface称为 OriginalLite仅缺少 link :

interface OriginalLite extends Omit<Original, 'link'> {}

请注意,您没有扩展 Original .那是因为在 TypeScript 中“扩展”意味着使类型更具体(也称为“缩小”),但在您的情况下,您正在做的是使其不那么具体(也称为“扩大”)。这就是为什么 extends Original没有出现在该定义中。我想你没问题。

让我们测试一下:

declare const originalLite: OriginalLite;
originalLite.name; // string
originalLite.size; // number
originalLite.link; // error, property 'link' does not exist on type 'OriginalLite'

看起来不错。

关于typescript - 如何通过扩展从 TypeScript 接口(interface)中删除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51804810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com