打字稿对象语法问题(无索引签名)

时间:2018-10-28 01:23:58

标签: typescript

我正在转换一些旧代码,如下所示:

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...
}

1 个答案:

答案 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;
 }
}