如果我在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编译错误。
答案 0 :(得分:4)
这是预期的行为。
要使用索引签名,您需要使用索引语法 - 或使用您演示的文字作业。
let banana: Fruit;
banana.colour = 'yellow';
banana['haveToPeel'] = true;