如何通过ts中的变量获取属性

时间:2018-12-11 07:17:10

标签: javascript typescript

我有一个这样的对象:

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'),请我做不到!

2 个答案:

答案 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类型。在这种情况下,objstring的记录。

const obj: Record<string, string> = {
  foo: 'das',
  bar: 'few',
  baz: '',
};


obj.x; // No error — TypeScript knows `x` might exist in runtime.