Typescript接口 - 索引签名不一致

时间:2016-06-10 12:30:59

标签: typescript

如果我在Typescript中使用单个命名属性和索引签名声明一个接口,我的假设是索引签名允许我向对象添加属性而不会出现语法错误。

interface Fruit {
    colour: string;
    [otherProperties: string]: any;
}

当我在声明中添加属性时,这将起作用,因此以下编译正常:

let apple: Fruit = {
    colour: 'green',
    haveToPeel: false
}

但如果我在创作后延长

let banana: Fruit;
banana.colour = 'yellow';
banana.haveToPeel = true;

然后我收到TS错误

  

“[ts]属性'haveToPeel'在'Fruit'类型中不存在。”

我已经阅读了索引签名,但无法深入了解如何在创建后允许我的对象动态扩展而没有TS编译错误。

1 个答案:

答案 0 :(得分:4)

这是预期的行为。

要使用索引签名,您需要使用索引语法 - 或使用您演示的文字作业。

let banana: Fruit;
banana.colour = 'yellow';
banana['haveToPeel'] = true;