В TypeScript разработчики часто сталкиваются с терминами «никогда» и «недействительно» при работе с аннотациями типов. Хотя на первый взгляд они могут показаться похожими, они имеют разные значения и варианты использования. В этой статье мы рассмотрим различия между этими двумя типами и приведем примеры кода, иллюстрирующие их использование.
Понятие «void»:
Тип «void» в TypeScript обозначает отсутствие значения. Его часто используют для обозначения того, что функция ничего не возвращает. Например:
function greet(): void {
console.log("Hello, world!");
// No return statement
}
В этом примере функция «greet» не возвращает никакого значения, поэтому мы аннотируем ее типом «void». Функции с типом возврата «void» нельзя использовать в выражениях, ожидающих значения, таких как присваивания или условные выражения.
Исследование «никогда»:
Тип «никогда» представляет значения, которые никогда не встречаются. Он используется для обозначения того, что функция никогда не возвращает значение или что переменная не может иметь никакого возможного значения. Один из распространенных случаев использования слова «никогда» — функции, которые выдают ошибки или имеют бесконечные циклы. Например:
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {
// do something indefinitely
}
}
В этих примерах функции «throwError» и «infiniteLoop» имеют тип возврата «никогда», поскольку они не возвращают допустимое возвращаемое значение. Переменные типа «никогда» также можно использовать для обеспечения исчерпывающей проверки типов в TypeScript.
Дополнительные варианты использования:
- Недоступный код. Тип «никогда» можно использовать для аннотирования путей кода, о которых известно, что они недоступны. Например, при использовании типа «никогда» в защите типа:
function isString(value: unknown): value is string {
if (typeof value === "string") {
return true;
} else {
throw new Error("Invalid value!");
}
}
- Дискриминируемые союзы: слово «никогда» может использоваться в дискриминируемых союзах для обозначения невозможных случаев. Когда охвачены все возможные случаи, кроме одного, TypeScript может сделать вывод, что отсутствующий вариант относится к типу «никогда». Это помогает обеспечить обработку всех случаев в коде.
type Shape = Square | Circle;
interface Square {
kind: "square";
sideLength: number;
}
interface Circle {
kind: "circle";
radius: number;
}
function getArea(shape: Shape): number {
switch (shape.kind) {
case "square":
return shape.sideLength 2;
case "circle":
return Math.PI * shape.radius 2;
default:
const _exhaustiveCheck: never = shape; // Ensures all cases are handled
throw new Error("Invalid shape!");
}
}
В TypeScript типы «void» и «никогда» служат разным целям. «void» указывает на отсутствие значения, особенно в контексте функций, которые ничего не возвращают. С другой стороны, «никогда» представляет значения или пути кода, которые никогда не встречаются. Понимание различий между этими типами поможет вам писать более выразительный и типобезопасный код на TypeScript.