TS TypeScript  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

keyof, typeof и доступ по индексу

Разбирает тему «keyof, typeof и доступ по индексу» на практических сценариях: поиск дефектов, сравнение решений и оценка последствий. Вопросы требуют читать код, сопоставлять статические гарантии с поведением JavaScript и выбирать решение, которое не рассыплется при развитии проекта.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 25
Какой тип создаёт keyof User?
TypeScript
type User = { id: string; age: number; active: boolean };
type UserKey = keyof User;
Вопрос 2 из 25
Что даёт keyof при строковой index signature?
TypeScript
type Scores = { [name: string]: number };
type ScoreKey = keyof Scores;
Вопрос 3 из 25
Почему K extends keyof T запрещает опечатку?
TypeScript
function read<T, K extends keyof T>(obj: T, key: K) {
  return obj[key];
}
read({ id: "u1" }, "idd");
Вопрос 4 из 25
Когда параметр key: string слишком широк?
Вопрос 5 из 25
Почему keyof не перечисляет ключи объекта во время выполнения?
Вопрос 6 из 25
Как получить тип существующей константы config?
TypeScript
const config = { port: 8080, mode: "prod" as const };
type Config = typeof config;
Вопрос 7 из 25
Как получить тип функции, не дублируя сигнатуру?
TypeScript
function createUser(id: string) {
  return { id, createdAt: new Date() };
}
type Factory = typeof createUser;
Вопрос 8 из 25
Почему typeof используется только с идентификатором или доступом к свойству в type query?
TypeScript
// type Bad = typeof (Math.random() > 0.5 ? "a" : 1);
Вопрос 9 из 25
Зачем выводить тип из объекта as const вместо вручную дублировать union ключей?
Вопрос 10 из 25
Какой риск у typeof огромного внутреннего объекта в публичном API?
Вопрос 11 из 25
Какой тип имеет User["age"]?
TypeScript
type User = { id: string; age: number; active: boolean };
type Age = User["age"];
Вопрос 12 из 25
Как получить union типов нескольких свойств?
TypeScript
type User = { id: string; age: number; active: boolean };
type PublicValue = User["id" | "active"];
Вопрос 13 из 25
Какой тип извлекается из массива?
TypeScript
type Rows = Array<{ id: string; score: number }>;
type Row = Rows[number];
Вопрос 14 из 25
Почему T[string] не всегда допустим для generic T?
Вопрос 15 из 25
Как indexed access помогает избежать дублирования типов DTO?
Вопрос 16 из 25
Какой тип возвращает get?
TypeScript
function get<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}
const user = { id: "u1", age: 36 };
const age = get(user, "age");
Вопрос 17 из 25
Что можно утверждать о типе result?
TypeScript
function pick<T, K extends keyof T>(obj: T, keys: readonly K[]): Pick<T, K> {
  return {} as Pick<T, K>;
}
const result = pick({ id: "u1", age: 36 }, ["id", "age"]);
Вопрос 18 из 25
Как написать setter без разрыва связи key/value?
TypeScript
function set<T, K extends keyof T>(obj: T, key: K, value: /* ? */) {
  obj[key] = value;
}
Вопрос 19 из 25
Почему функция set(obj, key: keyof T, value: T[keyof T]) слабее generic K?
Вопрос 20 из 25
Когда лучше отказаться от универсального get/set в пользу явных методов?
Вопрос 21 из 25
Какой тип должен получить value, чтобы тест подтвердил связь ключа и значения?
TypeScript
type Settings = { theme: string; timeout: number };
declare function get<T, K extends keyof T>(obj: T, key: K): T[K];
declare const settings: Settings;
const value = get(settings, "timeout");
Вопрос 22 из 25
Какой ключ должен быть отклонён при использовании keyof User?
TypeScript
type User = { id: string; name: string };
declare function read(key: keyof User): void;
Вопрос 23 из 25
Почему typeof config полезно проверять вместе с as const?
Вопрос 24 из 25
После добавления optional-свойства тип T[K] стал включать undefined. Какой тест должен измениться осознанно?
Вопрос 25 из 25
Как проверить функцию set<T, K extends keyof T>, чтобы не пропустить потерю связи T[K]?

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

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

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

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