请解释?打字稿索引签名

时间:2018-03-17 16:33:52

标签: typescript properties typescript-typings

我刚刚在TypeScript

中偶然发现了以下语法
export interface OrderPool {
    [id: string]: Level3Order;
}

有人可以澄清我在看什么吗?

我能理解的最好是这是一个接口OrderPool,它包含一个名为Id string(array?)的属性,类型为Level3Order ????

Level3Order与属性Id的关系是什么,Id是数组还是单个实例?

2 个答案:

答案 0 :(得分:5)

表示实现OrderPool接口的对象包含键/值对,其中键(在本例中称为id)的类型为string,值为Level3Order

例如,此对象正确实现了接口:

{
  'item1': new Level3Order,
  'anotherItem': new Level3Order
}

你也可能有像

这样的东西
export interface OrderPool {
  [id: number]: Level3Order;
}

示例:

{
  1: new Level3Order(),
  5: new Level3Order()
}

答案 1 :(得分:1)

简单来说意味着什么,"如果你索引 OrderPool 类型的东西,你会得到类型为 Level3Order 的东西。"

签名的类型应始终为字符串或数字。参数的名称(" id")并不重要。

请看下面的示例以获得完整的想法。

class Level3Order{
    public dummy : number = 0;
}

export interface OrderPool {
    [id :string]: Level3Order;
}

let pool : OrderPool ={}
pool["test"] = 5; //Error number is not assignable to Level3Order
pool["test"] = new Level3Order();  //Ok
pool["whatever"] = new Level3Order();  //Ok
pool.whatever =  new Level3Order(); //Still ok
pool["test"].dummy = 5; // Dummy is a property on Level3Order, Ok 
相关问题