Never примитивный тип¶ Примитивный типа данных Never служит для указания того, что какие-либо операции никогда не будут выполнены. Never обозначается ключевым словом never и так же, как и void, не имеет явных значений. Тип данных never является подтипом всех типов, что делает его совместимым со всеми остальными типами. function action(): never { throw new Error(); } class TypeSystem { static any: any = action(); // Ok static number: number = action(); // Ok static string: string = action(); // Ok static boolean: boolean = action(); // Ok static null: null = action(); // Ok static undefined: undefined = action(); // Ok static void: void = action(); // Ok static never: never = action(); // Ok } TypeSystem.never = TypeSystem.any; // Error TypeSystem.never = TypeSystem.number; // Error TypeSystem.never = TypeSystem.string; // Error TypeSystem.never = TypeSystem.boolean; // Error TypeSystem.never = TypeSystem.null; // Error TypeSystem.never = TypeSystem.undefined; // Error TypeSystem.never = TypeSystem.void; // Error TypeSystem.never = TypeSystem.never; // Ok Так как типу never нельзя присвоить значение, отличное от самого типа never, единственным местом, в котором его может использовать разработчик, является аннотация возвращаемого из функции или метода значения, с одной оговоркой. Тип never можно указать только той функции, из которой программа действительно никогда не сможет выйти. Такой сценарий может выражаться в виде функции, вызов которой приведет к однозначному исключению или тело функции будет включать бесконечный цикл. function error(message: string): never { throw new Error(message); } function loop(): never { while (true) {} } Вывод типов определит принадлежность возвращаемого функцией значения к типу never, только если он указан в аннотации возвращаемого типа явно. function error(message: string): never { throw new Error(message); } function action() { // function action(): never return error('All very, very bad.'); } let identifier = error(); // let identifier: never let identifier = action(); // let identifier: never Стоит заметить, что без явного указания типа never вывод типов определит принадлежность возвращаемого значения к типу void. function error(message: string) { // function error(): void throw new Error(message); } function loop() { // function loop(): void while (true) {} } Тип never является уникальным для TypeScript. В JavaScript подобного типа не существует.