Продвинутый Typescript
Теория: Тип object
В некоторых ситуациях, мы хотим ограничить входной параметр функции типом «любой объект». Например, для функции, которая проверяет наличие ключей в объекте. Существует несколько способов сделать такую проверку и не все из них работают так, как ожидается. Посмотрите на пример:
Пустой объектный тип {} подразумевает под собой объект любой структуры и ограничивает множество всех значений, за исключением null и undefined. Пустой интерфейс работает так же как и пустой объектный тип. Это вряд ли то, что мы ожидали.
Тип Object — это тип объекта. Он работает почти так же, как тип {}. Разница только в том, что Object предопределяет типы toString() и некоторых других встроенных методов, а тип {} этого не делает. Чтобы разобраться, изучим такой пример:
Второе определение bar не работает, потому что тип Object указывает, что метод toString() должен возвращать строку.
Если мы хотим работать с не примитивными значениями, то для этого существует еще один тип — object с маленькой буквы:
При использовании типа object попытка получить доступ к свойствам объекта приведет к ошибке. Для такой задачи используются уже другие механизмы.
В последующих уроках мы изучим подходы, такие как использование типа Record и дженериков с keyof для работы с объектами любой структуры. А пока вы можете использовать встроенные методы JavaScript, такие как Object.entries() и Object.fromEntries(), чтобы манипулировать объектами с типом object.
Пример динамического извлечения ключей из объекта с использованием этих методов:
- Метод
Object.entries(obj)преобразует объект в массив пар [ключ, значение]. - Далее с помощью метода
filter()мы оставляем только те пары, ключи которых содержатся в массивеkeys. - Наконец,
Object.fromEntries(entries)собирает новый объект из отфильтрованных пар.
Этот подход позволяет легко работать с объектами, фильтруя ключи на основе динамических данных, даже если используется тип object, не предоставляющий доступ к свойствам напрямую.





