Как стать автором
Обновить

Использование never в TypeScript

опустим мы хотим написать компонент диалог. Его размер может задаваться двумя различными способами:

1. Явно с помощью width и height 

2. Диалог должен принять размер контента, за это отвечает свойство responsive

Тут есть несколько проблем:

1. Чтобы передать либо width и height или только responsive, мы пометили все поля как необязательные и теперь мы можем передать неправильный набор полей или не передать ни одного вовсе.

2. Можем передать все параметры одновременно и в таком случае непонятно, должен диалог быть отзывчивым или отобразиться с указанным размером. 

Нам нужно реализовать тип, в котором все поля будут обязательными, но который позволит нам передать либо width и height либо responsiv , в противном случае мы должны получить ошибку компиляции.

Такой интерфейс будет выглядеть вот так:

type DialogProps = { title: string } & (
  | {
      responsive: boolean;
      width?: never;
      height?: never;
    }
  | {

      responsive?: never;
      width: number;
      height: number;
    }

);

never - пустое множество или проще говоря, это тип, которому не может быть присвоено ни одно значение.

// ✅ correct 
const withSize: DialogProps = {
  title: "Dialog with Size",
  width: 600,
  height: 500,
  responsive: undefined
};

// ❌ incorrect
const incorrect: DialogProps = {
  title: "Incorrect Props Dialog",
  responsive: false,
  width: 600
  height: 500
};

В третьем примере мы получим ошибку ?.

https://t.me/cherkashindev/21

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии4

Публикации

Работа

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань