Перейти к содержанию
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
Логотип бренда
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. TypeScript
  5. TypeScript Фишка 🎯: satisfies против "тихих" ошибок

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

Запланировано Прикреплена Закрыта Перенесена TypeScript
typescript
1 Сообщения 1 Постеры 25 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsK Не в сети
    kirilljsK Не в сети
    kirilljs
    js
    написал отредактировано kirilljs
    #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 ответ Последний ответ
    0

    Категории

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

    Контакты

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

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

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

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы