我想我的JavaScript的数据是这样的:打字稿指数签名访问器
"dogs": {
"ada": {
age: 7,
breed: poodle
},
"levin": {
age: 5,
breed: shitzu
},
...
}
凡的名字是一个对象的关键。我有这个打字稿类:
export class Dog {
[dogName: string]: DogDetails;
}
我看得出来,我可以封装方法来创建accesssors的唯一方法是通过将这些静态方法来Dog
:
public static getDogName(dog: Dog): string {
return Object.keys(dog).toString();
}
public static getDogDetails(dog: Dog): DogDetails {
return dog[Dog.getDogName(dog)];
}
,这是相当可怕的。其中一个原因是是静态访问是必需的:
Dog.getDogName(dog) // this is how it must be done
,似乎这样违背了这个应该怎么写,这将是:
dog.getName(); // this unfortunately can't be done
,情况会好得多,如果有办法访问索引签名值。但是我找不到任何方法来实现这一点。有没有办法或者有更好的方法来写这个课程?
请注意,这是不可能的使用指数签名的类:
public getName(): string { // this won't work
Object.keys(this).toString();
}
既然抱怨答案后Property 'getName' of type '() => string' is not assignable to string index type 'DogDetails'
更新从@amiramw和意见的对话:
使用的角度分量是:
<ion-list *ngFor="let dog of dogs">
<ion-item>
<ion-avatar item-start>
<img src="assets/img/dog.jpg"/>
</ion-avatar>
<h4>{{Dog.getName(dog)}}</h4>
<p>{{Dog.getDogDetails(dog).breed}}</p>
</ion-item>
</ion-list>
看来我需要写的反馈后:
<ion-list *ngFor="let dogName of getDogNames()">
<ion-item>
<ion-avatar item-start>
<img src="assets/img/dog.jpg"/>
</ion-avatar>
<h4>{{dogName}}</h4>
<p>{{getDogDetails(dogName).breed}}</p>
</ion-item>
</ion-list>
其中getDogNames()
是:
public getDogNames(): string[] {
if (this.dogs) {
return Object.keys(this.dogs);
} else {
return new Array<string>();
}
}
而且getDogDetails()
是:
public getDogDetails(name: string): DogDetails {
return this.dogs[name];
}
哪些工作,但这不是我正在寻找的。对于我的整体问题的解决方案,我会给予我们最好的答案。
但是,我很高兴知道是否有办法获得打字稿索引签名值?
你怎么得到这个名字?例如。 “ada” – HankCa
你可以通过调用Object.keys(狗)来得到狗的列表,然后你就可以得到这些狗的名字,你可以通过'dog [dogName]'来访问每个狗的数据。其他选项是维护数组中的狗列表并向接口添加'name'属性。 – amiramw
好的,我看到你的方法。我不认为你的打字稿代码与我所拥有的基本上不同,它只是你访问数据的方法。这可能是我必须做的事情,但是这与我认为应该完成的事情不同,并且与文本案例不同。我将更新我的问题,以便使用用于遍历此数据的角码进行限定。感谢您的努力。 – HankCa