我有一个这样的对象:
const obj = {
foo: 'das',
bar: 'few',
baz: '',
};
我想通过变量获取一些值,例如:
var x = ''; // I must assign the variable ''
当我获得一些价值时:
if (obj[x] != '') {
//do something
}
我遇到错误:
Element implicitly has an 'any' type because type '{ foo: string; bar: string; baz: string; }' has no index signature.
如何解决?
不建议我为x分配一些默认值('bar','foo','baz'),请我做不到!
答案 0 :(得分:0)
您没有以正确的方式验证它是否存在于对象中,应该是这样的:
if (obj[x] != undefined) {
//do something
}
尽管这似乎不是他的错误。除非您在对象的属性不存在时输入条件,否则会导致错误
答案 1 :(得分:0)
定义对象文字时,访问该属性上不存在的属性会引发错误,因为在那个时候我们可以确定它不存在。
const obj = {
foo: 'das',
bar: 'few',
baz: '',
};
obj.x; // Error — we know for sure `x` doesn't exist in `obj`.
但是,如果您知道此对象将在运行时中被修改,则可以告诉TypeScript它可以期望它是什么。如果它将具有某些属性,但是您还不知道它们的名称,可以使用索引签名来表示。
为此,请使用内置的Record
类型。在这种情况下,obj
是string
的记录。
const obj: Record<string, string> = {
foo: 'das',
bar: 'few',
baz: '',
};
obj.x; // No error — TypeScript knows `x` might exist in runtime.