Определить корректный тип для переменной MYType

Нужен тип keyof typeof obj: typeof получает тип объекта, а keyof строит объединение его ключей — 'name' | 'age'.

Короткий ответ

Что ответить на собеседовании

Нужен тип keyof typeof obj: typeof получает тип объекта, а keyof строит объединение его ключей — 'name' | 'age'.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо задать подходящий тип для MYType, чтобы любые переменные, объявленные с этим типом, могли принимать только те строки, которые соответствуют ключам объекта obj.

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const obj = {
  name: "Nik",
  age: 25
};

type MYType = any; // Здесь вместо any следует указать нужный тип

//---------

/** Здесь не должно возникать ошибок типизации */
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const var1: MYType = "name";

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const var2: MYType = "age";

//----------

/** Здесь должны появиться ошибки типизации */
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const var3: MYType = "test";

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const var4: MYType = 25;

Ответ

Нужен тип keyof typeof obj: typeof получает тип объекта, а keyof строит объединение его ключей — 'name' | 'age'.

type MYType = keyof typeof obj;

Строки name и age допустимы, test и число 25 — нет. Значение поля age не входит в множество ключей: выражение obj[keyof] и оператор keyof решают разные задачи.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее