TS TypeScript  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Массивы, кортежи и readonly

Вопросы требуют читать код, сопоставлять статические гарантии с поведением JavaScript и выбирать решение, которое не рассыплется при развитии проекта.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 20
Какой тип имеет элемент item?
TypeScript
const values: Array<string | number> = [1, "two"];
const item = values[1];
Вопрос 2 из 20
Почему push вызывает ошибку?
TypeScript
const ids: string[] = ["a", "b"];
ids.push(3);
Вопрос 3 из 20
Какой тип массива получится после filter с обычным булевым условием?
TypeScript
const values: Array<string | undefined> = ["a", undefined];
const present = values.filter(value => value !== undefined);
Вопрос 4 из 20
Функция только читает список названий. Какой параметр принимает и обычные, и readonly-массивы?
Вопрос 5 из 20
Массив содержит разные варианты сущности. Почему лучше типизировать его как Item[], где Item — размеченный union, а не как object[]?
Вопрос 6 из 20
Какие статические типы имеют переменные name и age?
TypeScript
const entry: [string, number] = ["Ada", 36];
const name = entry[0];
const age = entry[1];
Вопрос 7 из 20
Какой вызов разрешён для такого кортежа?
TypeScript
type Point = [x: number, y: number, label?: string];
function draw(point: Point) {}
Вопрос 8 из 20
Какой тип сохраняет точную пару после возврата из функции?
TypeScript
function pair() {
  return ["ok", 200];
}
Вопрос 9 из 20
Когда объект обычно понятнее кортежа?
Вопрос 10 из 20
В кортеж добавили третью обязательную позицию. Какой риск для существующих потребителей?
Вопрос 11 из 20
Какая строка будет отклонена компилятором?
TypeScript
const names: readonly string[] = ["Ada", "Linus"];
const first = names[0];
names.push("Grace");
Вопрос 12 из 20
Что остаётся изменяемым в этом типе?
TypeScript
type Config = {
  readonly server: {
    host: string;
  };
};
const config: Config = { server: { host: "a" } };
config.server.host = "b";
Вопрос 13 из 20
Почему функция с readonly-параметром универсальнее?
TypeScript
function total(values: readonly number[]) {
  return values.reduce((sum, value) => sum + value, 0);
}
Вопрос 14 из 20
Нужно действительно запретить изменение конфигурации во время выполнения. Достаточно ли readonly?
Вопрос 15 из 20
Какой контракт лучше для функции сортировки, которая не должна менять исходный массив?
Вопрос 16 из 20
Каков тип first при включённом noUncheckedIndexedAccess?
TypeScript
const values: number[] = [10, 20];
const first = values[0];
Вопрос 17 из 20
Как точнее выразить контракт функции head, если пустой массив допустим?
TypeScript
function head<T>(items: T[]) {
  if (items.length > 0) {
    return items[0];
  }
}
Вопрос 18 из 20
Какой тип ключа нужен для безопасного чтения объекта?
TypeScript
type User = { id: string; age: number };
function read(user: User, key: /* ? */) {
  return user[key];
}
Вопрос 19 из 20
В словаре Record<string, number> читается неизвестный ключ. Что меняет noUncheckedIndexedAccess?
Вопрос 20 из 20
Как выразить массив, в котором гарантирован хотя бы один элемент?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу