Название фичи: Never
Описание:
Never представляет тип, значение которого никогда не наступает. Never можно представить себе как вариант запрета использовать ключевое слово return в функции.
Аналог в c# / js: -
Решаемая проблема:
Тип Never указывает на то, что функция ни при каких обстоятельствах не может ничего вернуть из себя, например, она всегда бросает ошибку или включает в себя бесконечный цикл, который не может ничего вернуть из функции. Этот тип является субтипом и может быть присвоен любому типу, но не наоборот.
Когда разработчик хочет, что бы тот кто вызывает функцию, понимал, что она не пропустит выполнение кода дальше.
Пример возникновения:
Функция всегда бросает исключения или выход из которой никогда не происходит (например бесконечный цикл).
Переменная никогда не должна принимать значение true.
Как решить проблему:
Присвоить функции тип возвращаемого значения как Never.
Детали: Тип never является подтипом любого типа. Переменная типа never может быть присвоена переменной любого другого типа. С другой стороны, нет такого типа, который будет являться подтипом данного типа, также как и переменной данного типа ничего нельзя присвоить кроме переменной такого же типа (never).
Синтаксис:
function fail(message: string): never {
throw new Error(message);
}
Перекомпилированный в JS код:
function fail(message) {
throw new Error(message);
}