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 ExLends, Inc. Все права защищены.