@zlodiak

Почему разрешается добавить значение в кортеж?

Есть такой код:

let qwe: [string, number];
qwe = ['qqq', 4]
qwe.push(7);
qwe[1] = 44
qwe[2] = 77

console.log(qwe)

Он отрабатывает. Это видно по выводу в консоли, который не содержит сообщений об ошибках. Но с другой стороны vscode подчёркивает красным строку:

qwe[2] = 77

Это говорит о наличии какой-то ошибки. Объясните пожалуйста почему такая неоднозначная ситуация возникает и кому верить консоли или IDE?

LIVE DEMO
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Потому что кортеж в ts это подтип массива, а система типов ts настолько убога, что через нее нельзя выразить, что у подтипа недоступны какие-то методы основного типа.
qwe[2] = 77
Тут просто сразу 2 ошибки типов:
во-первых 77 нельзя присвоить типу undefined - так как [string, number] - это вполне себе сахар над типом
{readonly length: 2; 0: string; 1: number} & Readonly<typeof Array.prototype>

во-вторых 2 в индексе опять таки нельзя воткнуть в тип 'length' | 0 | 1 | keyof typeof Array.prototype
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы