gpt4 book ai didi

typescript - 在 typescript 中的界面内合并对象

转载 作者:搜寻专家 更新时间:2023-10-30 21:22:34 34 4
gpt4 key购买 nike

我在打字文件中有以下内容:

interface A {
anObject: {
data: string;
};
someOtherData: boolean;
}

现在我想更改接口(interface),使 anObject 也包含 data2。我希望最终形式是

interface A {
anObject: {
data: string;
data2: string;
};
someOtherData: boolean;
}

我已经尝试过这样做但失败了:

interface A {
anObject: {
data2: string;
}
}

不是 anObject 同时具有数据和数据 2,它只有数据 2。无论如何要保留原始 key ?

最佳答案

嗯,这样的事情怎么样:

源代码

export interface A {
anObject: {
data: string;
};
someOtherData: boolean;
}

扩展.ts

import {A as _A} from './orig'

interface A extends _A {
anObject: _A['anObject'] & {
data2: string;
}
}

即:在import期间将原来的A重命名为_A .然后扩展它并将新的 data2 属性与原始属性合并 intersecting它与 looked-up 一个对象属性。

或者,如果您不介意 Atype 别名而不是 interface,则更简单:

扩展.ts

import {A as _A} from './playground'

type A = _A & {
anObject: {
data2: string;
}
}

...其中您仍然重命名原始部分,但随后只需将其与新部分相交即可。两种方法都可以为您提供所需的类型:

declare const a: A;
a.anObject.data.charAt(0); // okay
a.anObject.data2.charAt(0); // okay

这有帮助吗?

关于typescript - 在 typescript 中的界面内合并对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48114133/

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