我有一个非常简单的问题,我想在TypeScript中循环一个对象。
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中正确遍历对象而不出错的建议吗?
发布于 2020-02-19 08:06:10
TypeScript被命名为类型脚本是有原因的。
问题是,它没有指定对象内部的内容.
关于如何正确地循环TypeScript中的对象而不出错的建议吗?
要正确地做到这一点,您应该指定对象内部的内容。这可以通过以下方式实现:
interface MyObjectsInterface {
[key: string]: number;
}const an_object: MyObjectsInterface = {
one: 1,
two: 2,
three: 3
};中的值了
for (let key in an_object) {
let value: number = an_object[key];
// Do something with value
}通过这种方式,您将始终知道对象内部的内容。
发布于 2020-01-13 20:11:55
为此目的,我通常编写一个助手函数,以便我的“每个对象属性”循环可以编写如下:
objForEach(an_object, (k, v) => {
console.log('key', k, 'value', v);
});执行情况如下。有益的是,通过使其泛化,参数k和v可以根据an_object正确推断它们的类型。
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)。
发布于 2022-01-30 11:28:38
正如@OuuGiii所言,它是TYPEscript。因此,只需定义循环变量的键即可。但是,如果您像我一样懒惰,并且不想定义一个完整的接口,那么请注意,您可以这样做:
{ // 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
}
}https://stackoverflow.com/questions/59723311
复制相似问题