使用TypeScript中的签名索引扩展动态对象

时间:2017-11-23 10:36:38

标签: typescript

毕竟这可能是一个非常简单的问题。但我还没有找到解决方案。

我有一个用签名索引定义的动态对象。通常,所有属性都应为string类型。但有一些例外。例如,width应始终为number类型。然而,当我将它添加到我的界面时,我得到了错误

error TS2411: Property 'width' of type 'number' is not assignable to string index type 'string'.

这将是我的界面:

interface DynamicStyleObject {
  [ key : string ] : string;
  width : number;
}

1 个答案:

答案 0 :(得分:0)

如果有时您的属性可以是number,则可以创建索引类型string | number,因此它接受数字或字符串属性。

interface DynamicStyleObject {
  [ key : string ] : string|number;
  width : number;
}

参考:Discriminated unions, also known as tagged unions or algebraic data types pattern