Angular 2 TypeScript如何在Array中获取元素

时间:2017-11-21 21:13:24

标签: arrays typescript

我需要按键获取数组中的元素。

const legendColors = {'On Hold': '#ef2e2e', 'Shipped': '#ff8e28', 'Complete': '#61c673', 'New': '#007cbb'};

...

return {name: v.name, value: v.value, color: legendColors[v.name]};

lint工具在legendColors[v.name]上返回此错误:

ERROR in src/app/pages/orders/orders.composant.ts(46,62): error TS7017: Element implicitly has an 'any' type because type '{ 'On Hold': string; 'Shipped': string; 'Complete': string; 'New': string; }' has no index signature.

1 个答案:

答案 0 :(得分:2)

Typescript抱怨因为无法保证v.namelegendColors的键之一,并且没有索引签名。您可以通过给typescript提供v.name实际上是其中一个键的提示来解决这个问题:

return {name: v.name, value: v.value, color: legendColors[v.name as keyof typeof legendColors]};

或者如果legendColors遵循您已经知道名称的界面,您可以简化一点:

return {name: v.name, value: v.value, color: legendColors[v.name as keyof SomeInterface]};

最后,如果您确实不确定v.name是否是legendColors的键,那么您实际上必须为其添加索引签名。

const legendColors: {[key: string]: string} = {'On Hold': '#ef2e2e', 'Shipped': '#ff8e28', 'Complete': '#61c673', 'New': '#007cbb'};