这是什么结构,我该如何使用?

时间:2018-12-12 13:55:30

标签: angular typescript

我对angular还是很陌生,并且正在尝试为其他人的代码编写单元测试。 (他们不能打扰,现在他们已经去做更好的事情了。)

这是什么结构?

export interface SomeState {
    services: { [lineItemNumber: string]: SomeService };
 }

这是正在访问它的代码行。

 const serviceTypeId = someState.services[id].serviceType.id;

它是从API加载的。我似乎无法弄清楚要尝试使用Google来发现哪种结构。我需要在单元测试中复制该结构,但无法弄清楚。

4 个答案:

答案 0 :(得分:0)

如果对象要实现SomeState接口,则只需要有一个名为services的键,其值本身就是一个对象,其键是字符串,并且值的类型为{{1 }}


SomeService

答案 1 :(得分:0)

那是字典。结构是这样的:

{
'1': someService1,
'2': someservice2
}

someState.services ['1']返回someService1

答案 2 :(得分:0)

简而言之,这将服务属性的类型定义为键/值结构,键是string和值SomeService,其称为Indexable类型

示例IArray接口:

interface INameOfInterface {
    [index: type]: type;
}

interface IArray {
    [index: number]: any;
}

SomeState的示例

let i = 2;
let srv:SomeState  = {
  services:{
   'key0' : new SomeService(),
   'key1' : new SomeService(),
   ['key'+i] : new SomeService(), // this not related to type it just get the name dynamic 
   'anything': new SomeService()
    .... 
 }
}

Indexable Types

答案 3 :(得分:-1)

经过大量挖掘和寻求帮助之后,我发现此结构利用了计算所得的属性名称,如下所述:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names

因此,这些计算出的属性名称是在运行时创建的属性。要初始化它们,请执行以下操作:

services: {[serviceId]: service}