TypeScript Фишка 🎯: satisfies против "тихих" ошибок
-
Опечатки в свойствах объектов — частая боль в TypeScript. Особенно коварны ошибки доступа к несуществующим полям, которые TypeScript не замечает при использовании интерфейсов.
Операторsatisfies
решает эту проблему, добавляя строгую проверку на этапе компиляции!Рассмотрим пример конфигурации API:
// Конфигурация API interface ApiConfig { endpoints: Record<string, string>; } // Проблема: можно обратиться к несуществующему свойству без ошибки const config1: ApiConfig = { endpoints: { users: "/api/users", posts: "/api/posts" } }; // Далее в коде — опечатка остаётся незамеченной! fetch(config1.endpoints.user); // Должно быть 'users' — но TypeScript не ругается!
В данном случае мы определяем интерфейс
ApiConfig
, гдеendpoints
— это объект со строковыми ключами и значениями. Однако, когда мы пытаемся получить доступ к несуществующему свойству (например,user
вместоusers
), TypeScript не выдает ошибку. Это происходит потому, что типRecord<string, string>
допускает любые строки как ключи, и компилятор не может проверить, действительно ли такое свойство существует.Решение: использование оператора
satisfies
Чтобы решить эту проблему, можно использовать оператор
satisfies
. Этот оператор проверяет, удовлетворяет ли значение заданному типу, но при этом не изменяет фактический тип значения. Таким образом, он позволяет ловить опечатки на этапе компиляции.// Решение: satisfies ловит опечатки ещё на этапе компиляции const config2 = { endpoints: { users: "/api/users", posts: "/api/posts" } } satisfies ApiConfig; // Работает корректно fetch(config2.endpoints.users); // ✅ Ошибок нет // Ошибка типа — опечатка будет замечена! fetch(config2.endpoints.user); // ❌ Ошибка TypeScript — перехватывает опечатку!
Как работает оператор
satisfies
-
Проверка соответствия типа: Оператор
satisfies
проверяет, удовлетворяет ли значение указанному типу. Если значение не проходит проверку — компилятор выдаст ошибку. -
Не изменяет фактический тип: После применения
satisfies
, фактический тип значения остаётся тем же. Это отличает его от явного приведения (as
), которое может «скрыть» структуру данных. -
Ловит опечатки: В нашем примере попытка обратиться к
user
вместоusers
вызовет ошибку компиляции, так как объект должен соответствоватьApiConfig
.
Оператор
satisfies
— это мощный инструмент в TypeScript, который помогает предотвратить “тихие” ошибки и улучшить качество кода. Он особенно полезен при работе с конфигурациями, маршрутами, словарями и другими объектами, где важно сохранить строгую типизацию и при этом избежать чрезмерного аннотирования. -
© 2024 - 2025 RosDesk, Inc. Все права защищены.