Егорcard.quoted3 ай бұрын
Но важно помнить, что это фикция. Как и все другие аспекты системы типов TypeScript, она удаляется при выполнении (правило 3). Это значит, что конструкции вроде Object.keys вернут строки:
const keys = Object.keys(xs); // тип string[]
for (const key in xs) {
key; // тип string
const x = xs[key]; // тип number
}
Удивительно, что последнее обращение работает, так как string не может быть назначен для number. Лучше всего представить это как прагматичное отклонение в стиле итерации по массивам, что является обыденным в JavaScript. Это не самый хороший способ производить цикл по массивам. Если вам не важен индекс, можете использовать for…of:
for (const x of xs) {
x; // тип number
}
Если же индекс важен, то можно получить его в виде number с помощью Array.prototype.forEach:
xs.forEach((x, i) => {
i; // тип number
x; // тип number
});
Чтобы осуществить раннее прерывание цикла, лучше использовать цикл в стиле С for(;;) :
for (let i = 0; i < xs.length; i++) {
const x = xs[i];
if (x < 0) break;
}
Если типы не кажутся вам убедительными, то оцените качество: в большинстве браузеров и движках JavaScript циклы for…in по массивам оказываются на несколько порядков медленнее, чем for…of или for(;;).
  • Комментарий жазу үшін кіру немесе тіркелу