【问题标题】:Element implicitly has an 'any' type because type '{}' has no index signature. [7017]元素隐式具有“任何”类型,因为类型“{}”没有索引签名。 [7017]
【发布时间】:2019-05-12 05:22:50
【问题描述】:

我正在使用打字稿并看到以下错误

[ts] 元素隐式具有“任何”类型,因为类型“{}”没有索引签名。 [7017]

const store = {};
setItem: jest.fn((key, value) => {
    store[key] = value.toString();
})

我可以通过将商店设置为任何类似的方式来修复它

const store: any = {};

但我想输入它,但不知道该怎么做。有人可以帮忙吗?

【问题讨论】:

    标签: typescript typescript-typings


    【解决方案1】:

    嗯,你希望它有什么样的类型?如果它只是一个简单的键值对,那么这就足够了:

    type Dict = { [key: string]: string };
    
    const store: Dict = {};
    
    store['foo'] = 'bar';
    

    编辑(2019 年 6 月)

    Typescript 还有一个名为 Record 的内置类型,它适用于这个用例 - 只要你的类型不应该有任何预定义的键!

    const store: Record<string, string> = {};
    
    store.foo = 'bar';
    

    【讨论】:

    • 谢谢,就这样。我很接近,但我有type StoreType { key: string;}。为什么需要两次声明字符串?
    • @peterflanagan,因为您尝试使用动态键键入对象,所以您必须告诉编译器键本身的类型 [key: string] 以及将关联的值的类型使用密钥 - 在这种情况下为 string
    • 好的,很酷,这是有道理的。如果它可以是字符串或数字呢? type Dict = { [key: string]: string | number }; ?
    • @peterflanagan,动态密钥的类型可以是stringnumber,是的。该值可以是您想要/需要的任何值。
    猜你喜欢
    • 2019-10-03
    • 2018-04-09
    • 2018-09-06
    • 1970-01-01
    • 2017-06-30
    • 2021-08-24
    • 2019-04-01
    • 2019-01-06
    • 1970-01-01
    相关资源
    最近更新 更多