打字稿:多括号字段声明

时间:2018-11-16 13:08:03

标签: typescript

我在一个项目中发现了这个表达式:

export class MyComponent implements OnInit {
    public field: { [key: number] : string } = something
    ...
}

,我不知道这意味着什么。谁能解释一下并给我参考,以便我可以学习这种类型的声明?

2 个答案:

答案 0 :(得分:3)

{ [key: number] : string }

是匿名/内联类型声明,它转换为:

interface Anon {
    [key: number]: string;
}

声明括号,该对象中任何未声明的附加属性的类型必须为number类型,并且该类型的值必须为string

{ 1: "foo", 2: "bar" } // valid
{ "1": "foo", "2": "bar" } // invalid

http://www.typescriptlang.org/docs/handbook/advanced-types.html#index-types-and-string-index-signatures

答案 1 :(得分:3)

field是一种对象类型(由于{}),具有返回字符串的数字索引签名。这意味着分配给该字段的对象只能具有数字键,并且该对象中的值必须为string

类型
let field: { [key: number]: string };

field = {
    0: "A",
    //"A": "A", // error key is not numeric
    //0: 0, // error value is not a string
} 

let a = field[0] //a is string

field = ["A", "B"] // arrays are valid as well

您可以详细了解here