假设我有这个:
const color = {
red: null,
green: null,
blue: null
};
const newColor = ['red', 'green', 'blue'].filter(e => color[e]);
错误出现在color[e]
底部附近:
元素隐式地具有“ any”类型,因为类型“ string”的表达式不能用于索引类型“ {red:null; 绿色:null;蓝色:null;}'。在类型“ {{红色:空;绿色:null;蓝色:null;}'。
我尝试在TypeScript文档中到处查找,但是我interface
对此到底想怎么想,以便它可以接受color[e]
?
您遇到的问题不是那color
是错误的类型,而是TypeScript推断了['red', 'green', 'blue']
be 的类型string[]
。通常,这种类型的推断是可取的,因为(对于所有编译器都知道)您可能希望继续推论'purple'
。但是,在这种情况下,你想编译器知道的唯一成员是三个字符串文字'red'
,'green'
和'blue'
。也就是说,您需要至少与一样具体的类型Array<'red'|'green'|'blue'>
。
假设你正在使用TS3.4或更高版本,最简单的方法来获得这种类型推理的编译器是使用const
断言:
const constAssertionTest = ["red", "green", "blue"] as const;
// const constAssertionTest: readonly ["red", "green", "blue"];
将as const
导致编译器来推断一个元组正是数组中的三个字符串文字组成的,在你设置的确切顺序。(它甚至是一个只读的元组)。这足以解决您的错误:
const newColor = (['red', 'green', 'blue'] as const).filter(e => color[e]); // okay
好的,希望对您有所帮助。祝好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句