【问题标题】:Extend dynamic object with signature index in TypeScript在 TypeScript 中使用签名索引扩展动态对象
【发布时间】:2017-11-23 20:35:54
【问题描述】:

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

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

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

这将是我的界面:

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

【问题讨论】:

    标签: typescript


    【解决方案1】:

    如果有时您的属性可以是number,您可以将索引类型设为string | number,这样它就可以接受数字或字符串属性。

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

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

    【讨论】:

    • 所以不可能有string的默认类型,而只有widthnumber
    • 哦,好吧,我刚刚发现我可以通过这种方式“扩展”它,说一般stringnumber 都是允许的,但对于width,只有number 是有效的。
    • @lumio 是的,这就是我的意思,抱歉我忘了添加 width 属性(不过我已经更新了)。关键是,string|number 将允许字符串和数字类型的属性,这样您就可以将属性严格指定为其中一种类型,例如 width: numberdisplay: string
    • 是的,我一开始就忘记了宽度。不用担心。感谢您的简单回答
    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 2015-11-05
    • 2016-09-19
    • 2021-06-11
    • 1970-01-01
    • 2021-09-06
    • 2016-05-06
    • 2018-07-18
    相关资源
    最近更新 更多