Напиши тип Senior Дженерики обновлено

const-параметр типа (TS 5.0)

Вопрос

Какой тип получится? Впишите тип.

declare function tuple<const T extends readonly unknown[]>(x: T): T;
const t = tuple(['a', 1]); // t: /* ? */

Попробуйте сами

Напишите тип, как написали бы в коде.

Показать ответ и разбор

Коротко

Правильный тип: readonly ['a', 1]. Модификатор const у параметра типа (TS 5.0+) заставляет выводить тип аргумента так, будто написали as const: литералы не расширяются, массив становится readonly-кортежем.

Правильный тип

readonly ['a', 1]

Разбор

Модификатор const у параметра типа (TS 5.0+) заставляет выводить тип аргумента так, будто написали as const: литералы не расширяются, массив становится readonly-кортежем. Без const здесь вышло бы (string | number)[]. Ограничение readonly unknown[] влияет на результат: с изменяемым unknown[] вывод был бы изменяемым кортежем ['a', 1], потому что readonly-кортеж под такое ограничение не подходит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме