Выбор ответа Middle Дженерики обновлено

Модификатор const у параметра типа

Вопрос

Какой тип у r?

function routes<const T extends readonly string[]>(r: T) {
  return r;
}
const r = routes(['/a', '/b']);

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

Выберите вариант, и откроется разбор.

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

Коротко

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

Варианты ответа

  1. readonly ('/a' | '/b')[]
  2. readonly ['/a', '/b']правильный ответ
  3. readonly string[]
  4. string[]

Разбор

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

Без const получилось бы string[]. Массив из объединения литералов и readonly string[] теряют порядок и длину.

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

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

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