【问题标题】:typescript strong typing - specifying object value types打字稿强类型 - 指定对象值类型
【发布时间】:2015-11-06 05:34:06
【问题描述】:

在 TypeScript 中,是否可以在 Object 中指定允许的值?例如。指定所有键都应该有数字:

{
  'id': 1,
  'attr1': 124,
  'attr2': 4356,
  ...
}

?

我搜索了http://www.typescriptlang.org/Handbook,发现我可以像这样使用数组类型(键和值):

interface StringArray {
  [index: number]: string;
}

但实际上,从概念上讲,Map(JS 对象)和 Array 并不相同(在 JavaScript 中,它的行为相似,但在 TypeScript 中,由于强类型化,应该分开处理)。

【问题讨论】:

    标签: javascript types typescript


    【解决方案1】:

    是否可以在对象中指定允许的值?例如。指定所有键都应该有数字

    是的,这是可能的。

    在 JavaScript 和 TypeScript(它是 JS 的超集)中,您可以通过 obj.propobj['prop'] 访问属性,这使得下面的语法可以工作。

    // This defines an interface that only allows values to be numbers
    interface INumbersOnly {
      [key: string]: number;
    }
    
    // when using it, it will check that all properties are numbers
    var x: INumbersOnly = {
      num: 1, // works fine
      str: 'x' // will give a type error
    };
    

    Above example in TS Playground

    【讨论】:

    • 请注意,您将无法对这些值使用自动完成功能(例如,如果您键入 x.,您将不会收到任何建议)。如果您需要,这个问题涵盖了一些选项。 stackoverflow.com/questions/52146544/…
    猜你喜欢
    • 2021-12-30
    • 2017-05-16
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2019-01-16
    • 2017-04-13
    • 2018-09-15
    • 2020-06-10
    相关资源
    最近更新 更多