首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript环槽对象

TypeScript环槽对象
EN

Stack Overflow用户
提问于 2020-01-13 19:56:10
回答 3查看 2.4K关注 0票数 5

我有一个非常简单的问题,我想在TypeScript中循环一个对象。

代码语言:javascript
复制
const an_object = {
    one: 1,
    two: 2,
    three: 3
};

for (let key in an_object) {
    let value = an_object[key];
    // Do something with value
}

此行let value = an_object[key];导致TypeScript错误:

react脚本元素隐式具有“任意”类型,因为“string”类型的表达式不能用于索引类型“{一:数字;二:数字;三:数字;}”。

我是TypeScript新手,并不真正理解这个问题。

这在JavaScript上很好,但在TypeScript上却不起作用。

关于如何在TypeScript中正确遍历对象而不出错的建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-19 08:06:10

TypeScript被命名为类型脚本是有原因的。

问题是,它没有指定对象内部的内容.

关于如何正确地循环TypeScript中的对象而不出错的建议吗?

要正确地做到这一点,您应该指定对象内部的内容。这可以通过以下方式实现:

  1. 创建接口

代码语言:javascript
复制
interface MyObjectsInterface {
    [key: string]: number;
}

  1. 将其分配给对象.

代码语言:javascript
复制
const an_object: MyObjectsInterface = {
    one: 1,
    two: 2,
    three: 3
};

  1. 现在您可以使用forloop

中的值了

代码语言:javascript
复制
for (let key in an_object) {
    let value: number = an_object[key];
    // Do something with value
}

通过这种方式,您将始终知道对象内部的内容。

票数 3
EN

Stack Overflow用户

发布于 2020-01-13 20:11:55

为此目的,我通常编写一个助手函数,以便我的“每个对象属性”循环可以编写如下:

代码语言:javascript
复制
objForEach(an_object, (k, v) => {
    console.log('key', k, 'value', v);
});

执行情况如下。有益的是,通过使其泛化,参数kv可以根据an_object正确推断它们的类型。

代码语言:javascript
复制
function objForEach<T>(obj: T, f: (k: keyof T, v: T[keyof T]) => void): void {
    for (let k in obj) {
        if (Object.prototype.hasOwnProperty.call(obj, k)) {
            f(k, obj[k]);
        }
    }
}

注意,我使用hasOwnProperty来检查属性是否属于对象本身,而不是其原型链中的另一个对象(参见this question)。

票数 3
EN

Stack Overflow用户

发布于 2022-01-30 11:28:38

正如@OuuGiii所言,它是TYPEscript。因此,只需定义循环变量的键即可。但是,如果您像我一样懒惰,并且不想定义一个完整的接口,那么请注意,您可以这样做:

代码语言:javascript
复制
{ // To make "key" a local variable it must be in a "block" (braces).
// If a block is not used, you cannot use another loop with this iteration
// variable This is especially important if, much like me, you have a bad habit
// of defining "i"s for all the loops.

    let key: keyof typeof an_object;
    for (key in an_object) {
        let value /*: typeof an_object[typeof key] */ = an_object[key];
        // Do something with value
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59723311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档