Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Collapse
exlends
Категории
  1. Home
  2. Categories
  3. Языки программирования
  4. TypeScript
  5. TypeScript Фишка 🎯: satisfies против "тихих" ошибок

TypeScript Фишка 🎯: satisfies против "тихих" ошибок

Scheduled Pinned Locked Moved TypeScript
typescript
1 Posts 1 Posters 34 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • kirilljsxK Offline
    kirilljsxK Offline
    kirilljsx
    js
    wrote on last edited by kirilljsx
    #1

    Опечатки в свойствах объектов — частая боль в 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

    1. Проверка соответствия типа: Оператор satisfies проверяет, удовлетворяет ли значение указанному типу. Если значение не проходит проверку — компилятор выдаст ошибку.

    2. Не изменяет фактический тип: После применения satisfies, фактический тип значения остаётся тем же. Это отличает его от явного приведения (as), которое может «скрыть» структуру данных.

    3. Ловит опечатки: В нашем примере попытка обратиться к user вместо users вызовет ошибку компиляции, так как объект должен соответствовать ApiConfig.

    Оператор satisfies — это мощный инструмент в TypeScript, который помогает предотвратить “тихие” ошибки и улучшить качество кода. Он особенно полезен при работе с конфигурациями, маршрутами, словарями и другими объектами, где важно сохранить строгую типизацию и при этом избежать чрезмерного аннотирования.

    1 Reply Last reply
    0

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2025 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Login

    • Don't have an account? Register

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups