如前所述,here TypeScript引入了foreach循环:

var someArray = [9, 2, 5];
for (var item of someArray) {
    console.log(item); // 9,2,5
}

但是没有索引/键吗?我期待着这样的事情:

for (var item, key of someArray) { ... }

推荐答案

.forEach已经具备了这种能力:

const someArray = [9, 2, 5];
someArray.forEach((value, index) => {
    console.log(index); // 0, 1, 2
    console.log(value); // 9, 2, 5
});

但是如果你想要for...of的能力,那么你可以将数组设置为索引和值:

for (const { index, value } of someArray.map((value, index) => ({ index, value }))) {
    console.log(index); // 0, 1, 2
    console.log(value); // 9, 2, 5
}

这有点长,所以将其放入可重用函数中可能会有所帮助:

function toEntries<T>(a: T[]) {
    return a.map((value, index) => [index, value] as const);
}

for (const [index, value] of toEntries(someArray)) {
    // ..etc..
}

Iterable Version

如果您使用--downlevelIteration编译器选项进行编译,那么在针对ES3或ES5时,这将起作用.

function* toEntries<T>(values: T[] | IterableIterator<T>) {
    let index = 0;
    for (const value of values) {
        yield [index, value] as const;
        index++;
    }
}

Array.prototype.entries() - ES6+

如果您能够针对ES6+环境,那么您可以使用Arnavion's answer中概述的.entries()方法.

Typescript相关问答推荐

React Router SR:useLocate()只能在路由组件的上下文中使用

PrimeNG Inputnumber,具有自定义号码格式器

通用默认值触发依赖通用约束变量的错误

Typescript问题和缩减器状态不会在单击时添加用途.属性'状态和调度'不存在于userContextType类型上'|null'

如何用不同的键值初始化角react 形式

属性的类型,该属性是类的键,其值是所需类型

Angular 行为:属性类型从SignalFunction更改为布尔

具有泛型类型和缺省值的键

匿名静态类推断组成不正确推断

TypeScrip:逐个 case Select 退出noUncheck kedIndexedAccess

被推断为原始类型的交集的扩充类型的交集

如何在方法中正确地传递来自TypeScrip对象的字段子集?

如何从输入中删除值0

Angular material 无法显示通过API获取的数据

错误TS7030:并非所有代码路径都返回值.";由tsfig.json中的";Strong";:False引起

TS不能自己推断函数返回类型

使用泛型以自引用方式静态键入记录的键

我的类型谓词函数不能像我预期的那样工作.需要帮助了解原因

如何为对象数组中的每个条目推断不同的泛型

JSX.Element';不可分配给类型';ReactNode';React功能HOC