Object.keys - 元素在 Typescript 中隐含类型为“any”

我有一个函数来获取具有属性值的键。在 Typescript 中复制此函数时,出现以下错误:

The element implicitly has type "any" because the expression of type "any" cannot be used to index the type "TestModel"

这是我的功能:

interface TestModel {
    test: string,
    "test 1": string,
    data: string,
    "data 1": string
  }

getKeyByValue(value: string) {

        let data: TestModel = {
            test: "test",
            "test 1": "one Test",
            data: "data",
            "data 1": "one data"
        }

        return Object.keys(data).find((key: any) => data[key] === value);
    }

更新

新功能:

return Object.keys(data).find((key: string) => data[key] === value);

错误:

let data: TestModel
The element implicitly has type "any" because the expression of type "string" cannot be used to index the type "TestModel".
   No index signature found with a parameter of type "string" on type "TestModel"
来自乌克兰的船长-yossarian

不需要any对键使用显式类型。TS 能够找出key字符串的类型。但是,我们知道类型keykeyof TestModel

Object.keys总是返回string[]而不是keyof T- 出于安全原因,这是设计使然。因此,打字稿中最常见的方法是type assertion在这种情况下使用:

interface TestModel {
    test: string,
    "test 1": string,
    data: string,
    "data 1": string
}

class Foo  {

    getKeyByValue(value: string) {

        let data: TestModel = {
            test: "test",
            "test 1": "one Test",
            data: "data",
            "data 1": "one data"
        }

        return (
            (Object.keys(data) as Array<keyof TestModel>)
                .find((key) => data[key] === value)
        );
    }
}

您可以在我的文章中找到更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Object.keys迭代导致Typescript错误“元素隐式具有'any'类型,因为索引表达式不是'number'类型”

typescript枚举字符串类型Object.keys的数组

为什么Object.keys不返回TypeScript中的keyof类型?

如何在TypeScript中设置在JSON文件上获取Object.keys的类型?

React Typescript元素类型

对象的TypeScript类型为object?

HTML 元素标签的 TypeScript 类型

Typescript中<svg>元素的类型是什么

TypeScript:Object.keys返回字符串[]

如何使用映射类型为“Object.keys”定义类型?

TypeScript中dom元素的别名?

在Typescript中,类型`object`和`Record <any,any>之间有区别吗?

为什么使用 Array.map() 使用数组中的数据呈现 HTML 元素有效,但使用 Object.keys().forEach() 无法从 Object 呈现?

TypeScript映射类型:获取数组的元素类型

使用Object.keys()时保留类型

在Typescript中,当数组包含不同的元素类型时,如何从数组类型中获取元素类型?

TypeScript如何推断数组文字的元素类型?

TypeScript:按类型属性选择数组的元素

Typescript,合并元组元素的对象类型

需要所有元素的Typescript类型防护

如何在WebStorm中找出TypeScript元素的类型(变量,函数)?

无法在angularjs中调用Object.keys

'object' 、{} 和 TypeScript 中的 Object 之间的区别

Typescript中的Object.fromEntries

遍历Typescript中的observable <Object []>

JsonDocument API 抛出异常“请求的操作需要'Object'类型的元素,但目标元素的类型为'Array'”

数组中的Typescript元素不可访问

获取TypeScript中的并集元素的“值”?

无法访问 TypeScript 中的模型元素