我正在转换一些旧代码,如下所示:
var storage = {
_cache:{},
setCache:function(key, value){
storage._cache[key] = value;
}
}
在打字稿中,storage._cache[key] = value;
引发错误:
TS7017: Element implicitly has an 'any' type because type '{}' has no index signature.
复制上面的示例有哪些语法?
我想弄清楚它的唯一方法是不创建整个对象的巨大接口,那就是首先用对象外部的索引签名创建我的对象:
let aMap:{ [code:string] : any } = {};
let storage = {
_cache:map
}
但是我宁愿直接进行此操作。我在寻找类似的东西:
let storage = {
_cache: { [code:string] : any } : {}, <-- this dont work obviously
setCache:function...
}
答案 0 :(得分:1)
您实际上并不需要整个对象的庞大接口,只需执行以下操作即可:
interface IStorage {
[code: string]: any;
setCache: (key: string, value: any) => void;
}
let storage: IStorage = {
_cache: {},
setCache:function(key, value){
storage._cache[key] = value;
}
}
最好键入整个对象,这样可以使您的代码更整洁,并且更易于推理。
或者,如果您真的想内联它,则可以执行以下操作:
let storage: { [code: string]: any} = {
_cache: {},
setCache:function(key, value){
storage._cache[key] = value;
}
}