Найти в Дзене
Программист - турист

Подготовка к собеседованию frontend (Задачки по typescript)

Для наглядности решаем задачки в сервисе https://www.typescriptlang.org/ Начнем с простой задачи на типизацию функции, проставляем решение в места с ... const X = {a:1, b:2, c: 3}; function getProperty<...>(obj: ..., key: ...): ... { return obj[key]; } getProperty(X, 'c'); Решением делитесь в комментариях Также типизируем функцию, но задачка гораздо сложней: в TODO добавь корректные дженерики и типы параметров/возврата: const X = { a: 1, b: 'bee', c: true, d: { n: 42 } }; function getMany(/* TODO */) { return keys.map(k => obj[k]) as any; } const t1 = getMany(X, ['a', 'c'] as const); // ✅ Ожидается: [number, boolean] const t2 = getMany(X, ['b', 'd', 'a'] as const); // ✅ Ожидается: [string, { n: number }, number] const t3 = getMany(X, [] as const); // ✅ Пустой кортеж const t4 = getMany(X, ['a', 'z'] as const); // ⛔ Ошибка типов: 'z' не ключ объекта X const xs = ['a', 'c'] as const; // ⛔ Ошибка типов: порядок и длина должны сохраняться (ожидается кортеж, а не массив any[]) const t
Оглавление

Для наглядности решаем задачки в сервисе https://www.typescriptlang.org/

Задача 1

Начнем с простой задачи на типизацию функции, проставляем решение в места с ...

const X = {a:1, b:2, c: 3};
function getProperty<...>(obj: ..., key: ...): ... {
return obj[key];
}
getProperty(X, 'c');

Решением делитесь в комментариях

Задача 2

Также типизируем функцию, но задачка гораздо сложней: в TODO добавь корректные дженерики и типы параметров/возврата:

const X = { a: 1, b: 'bee', c: true, d: { n: 42 } };
function getMany(/* TODO */) {
return keys.map(k => obj[k]) as any;
}
const t1 = getMany(X, ['a', 'c'] as const); // ✅ Ожидается: [number, boolean]
const t2 = getMany(X, ['b', 'd', 'a'] as const); // ✅ Ожидается: [string, { n: number }, number]
const t3 = getMany(X, [] as const); // ✅ Пустой кортеж
const t4 = getMany(X, ['a', 'z'] as const); // ⛔ Ошибка типов: 'z' не ключ объекта X
const xs = ['a', 'c'] as const; // ⛔ Ошибка типов: порядок и длина должны сохраняться (ожидается кортеж, а не массив any[])
const t5 = getMany(X, xs); // ✅ как кортеж [number, boolean]
const t6 = getMany(X, ['a', 'b']); // тип: (string | number)[]