В этом руководстве вы узнаете о типе 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
представляет возвращаемый тип функции, которая всегда выдает ошибку, или функции, содержащей неопределенный цикл.