Тип never в TypeScript

В этом руководстве вы узнаете о типе TypeScript never, который не содержит значения.

Тип never не содержит значений. Из-за этого вы не можете присвоить какое-либо значение переменной с never.

Обычно тип never используют для представления типа возвращаемого значения функции, которая всегда выдает ошибку. Например:

function raiseError(message: string): never {
    throw new Error(message);
}

Тип возвращаемого значения следующей функции определяется never :

function reject() { 
   return raiseError('Rejected');
}

Если у вас есть функциональное выражение, содержащее неопределенный цикл, его возвращаемый тип также имеет тип never. Например:

let loop = function forever() {
    while(true) {
        console.log('Hello');
    }
}

В этом примере тип возвращаемого значения функции forever()never.

Если вы видите, что возвращаемый тип функции — never, то вам следует убедиться, что это не то, что вы намеревались сделать.

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

Например, без типа never следующая функция вызывает ошибку, поскольку не все пути кода возвращают значение.

function fn(a: string | number): boolean {
  if(typeof a === "string") {
    return true;
  } else if(typeof a === "number") {
    return false;
  }   
}

Чтобы сделать код действительным, вы можете вернуть функцию, возвращаемый тип которой имеет тип never.

function fn(a: string | number): boolean {
  if(typeof a === "string") {
    return true;
  } else if(typeof a === "number") {
    return false;
  }  
  // make the function valid
  return neverOccur();
}

let neverOccur =() => {
   throw new Error('Never!');
}

Заключение

  • Тип never в Typescript не содержит значения.
  • Тип never представляет возвращаемый тип функции, которая всегда выдает ошибку, или функции, содержащей неопределенный цикл.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript