的情况并不少见有一个接口(例如,通过库定义),可以包含任意数据,这样的:属性访问器maplike对象
interface Something {
name: string;
data: { [key: string]: any };
}
我的问题是打字稿错误,当我尝试访问或者在具有任意值的对象上设置值。
let a: Something = {
name: 'foo',
data: { bar: 123 }
};
// Below errors with: 'Property "bar" does not exist on type {[key:string]: any}'
console.log(a.data.bar);
a.data.bar = 234;
这是一个在Typescript中的错误还是有一种简单的方法来避免这样的错误?
This Typescript playground清楚地说明了这个问题。
编辑
我正在寻找一个选项,希望不会让我有整个代码库重写从a.data.bar
到a.data['bar']
。
感谢您的回复,我以前见过这种方法,但对我来说似乎有缺陷。我正在尝试将一个小型项目转换为Typescript,并且一个库有一个类似于我的问题的界面。所以我需要去遍历所有文件,并从首选的'obj.prop'转换为'obj ['prop']'? 此外,这个选项也让我没有代码完成。这现在不是非常重要,但我觉得像这样重写我的代码严重得多。 – Csvn
@Csvn有没有简单的解决方案,但我编辑了我的答案,你有几个选项。 –
好吧,我似乎无法找到您提供的解决方案之外的解决方案。唯一的其他选择似乎是将'{[key:string]:any}'改变/覆盖到'any',这不太清楚。 – Csvn