通过更改对象数组中的对象来扩展接口

时间:2017-09-17 10:55:30

标签: typescript

我有一个基本界面,如:

interface base {
    property1: string
    property2: string;
    property3: [{
        something1: string;
        something2: string;
    }];
}

我希望有一个界面:

property1: string
property2: string;
property3: [{
    something1: string;
    something2: string;
    something3: number;
}];
property4: number;

我能够使用propert4来实现extend,如:

interface extended {
    property4: number
}

我还读到了如何扩展属性,并且这样做:

type extendedProperty = base['property3'];

interface extendedPropertyInterface extends extendedProperty {
    something3: number;
}
interface extended {
    property3: extendedPropertyInterface;
    property4: number;
}

这不起作用。我看到extendedPropert属于

类型
[{
    something1: string;
    something2: string;
}];

(注意数组括号)。我如何得到我想要达到的目标?

编辑:我无法更改base界面。

1 个答案:

答案 0 :(得分:1)

首先,此表单:[type]声明a tuple而不是数组,它应该是:type[]

关于你的要求,你可以这样做:

interface ArrayItem {
    something1: string;
    something2: string;
}

interface Base<T extends ArrayItem = ArrayItem> {
    property1: string
    property2: string;
    property3: T[];
}

interface ExtendedItem extends ArrayItem {
    something3: number;
}

interface Extended extends Base<ExtendedItem> {
    property4: number;
}

code in playground

修改

由于你无法改变base,这似乎有效:

interface extended extends base {
    property3: [{
        something1: string;
        something2: string;
        something3: number;
    }];
    property4: number;
}