gpt4 book ai didi

typescript - 选取除指定属性之外的所有属性

转载 作者:行者123 更新时间:2023-12-02 16:22:40 24 4
gpt4 key购买 nike

假设我有一个界面:

interface Buba {
k1: string;
k2: string;
k3: number;
}

我想基于此定义创建一个新类型,其中包含除指定属性之外的所有属性。例如我想摆脱 k1。这样的事情有可能吗?

type PickedBuba = Pick<Buba, !'k1'> // { k2: string, k3: number }

最佳答案

看来我已经找到了方法。我们需要一个辅助类型 StringOmit

type StringOmit<L1 extends string, L2 extends string> = ({ [P in L1]: P } &
{ [P in L2]: never } & { [key: string]: never })[L1];

然后我们可以编写自己的 PickOmit 实现

type PickOmit<O, K extends string> = Pick<O, StringOmit<keyof O, K>>;

那么解决方案将如下所示:

type PickedBuba = PickOmit<Buba, 'k1'> // { k2: string, k3: number }

编辑使用 Typescript 2.8,我们可以利用条件类型和新的内置类型排除来实现 Omit:

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

编辑2在 TypeScript 3.5 中,我们终于有了内置的 Omit 类型。

关于typescript - 选取除指定属性之外的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47741854/

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