我需要按键获取数组中的元素。
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.
答案 0 :(得分:2)
Typescript抱怨因为无法保证v.name
是legendColors
的键之一,并且没有索引签名。您可以通过给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'};