Omit
Завдання
Реалізуйте вбудований тип Omit<T, K>, який прийматиме об’єкт T та видалить з
нього список ключів K. Наприклад:
interface Todo {
title: string;
description: string;
completed: boolean;
}
type TodoPreview = MyOmit<Todo, "description" | "title">;
const todo: TodoPreview = {
completed: false,
};
Розв’язок
Omit<T, K> приймає об’єкт T і список ключів в K, які треба виключити з
об’єкта. Очевидно, що для вирішення цього завдання ми використаємо
типи зіставлення.
type MyOmit<T, K> = { [P in keyof T]: T[P] };
Залишається відфільтрувати властивості, які необхідно залишити в об’єкті. Для цього використаємо перепризначення ключів в типах зіставлення:
type MyOmit<T, K> = { [P in keyof T as P extends K ? never : P]: T[P] };
В результаті ми отримаємо тип, який перебирає властивості з T та перевизначає
ті, що не входять в K, на never. Таким чином, відфільтрувавши властивості
вхідного об’єкта, ми отримаємо необхідний нам тип.
Коментарі