TypeScript 解释never类型的目的
在TypeScript中,当我们确定某种情况永远不会发生时,我们使用never类型。例如,假设你构建了一个永远不会返回或总是抛出异常的函数,那么我们可以在该函数上使用never类型。Never是TypeScript中的一种新类型,表示永远不会遇到的值。
示例1: null可以赋值给void类型,但无法赋值给never类型的变量,也无法赋值给其他任何类型,包括任何。
Javascript
let variable: void = null;
let variable1: never = null; // error
let variable2: never = 1; // error
let variable3: never = "geek"; // error
let variable4: never = true; // error
输出: 无法将任何其他类型的值赋给一个类型为never的变量。
error TS2322: Type 'null' is not assignable to type 'never' ...
error TS2322: Type 'number' is not assignable to type 'never' ...
error TS2322: Type 'string' is not assignable to type 'never' ...
error TS2322: Type 'boolean' is not assignable to type 'never' ...
示例2: 在函数中使用”never”类型
返回“never”的函数绝不能有终点,无限循环就是一个例子,在这种情况下程序永远不会停止执行。在下面的代码中,有一个没有开始和结束的for循环。我们得不到任何输出。
Javascript
function infiniteLoop(): never {
for (;;) {}
}
// Function call
infiniteLoop();
函数greet()永远不会停止执行,它不断显示“hello”,并且没有返回值,因此没有使用never类型。
Javascript
function greet(): never {
while (true) {
console.log("hello");
}
}
// Function call
greet();
输出: 正如讨论的那样,当函数返回为空或永远停止执行时,才能使用never type。在输出中,hello无限重复。
hello
hello
hello
......
示例 3: 在抛出异常的函数中使用never类型
在下面的代码中, throwTypeerror() 函数没有返回值,但会引发错误,因此该函数的类型是never。 func() 的类型也是never,因为它调用了 throwTypeerror() 函数,该函数没有返回值。
JavaScript
function throwTypeerror(str: string): never {
throw new TypeError(str);
}
// Return type of this function is "never"
function func() {
return throwTypeerror("a type error is being raised");
}
// Function call
func()
输出: 函数 func() 调用 throwTypeError() 函数,该函数在不返回任何内容的情况下抛出错误,因此这两个函数都属于 never 类型。
throw new TypeError(str);
TypeError: a type error is being raised
参考: https://www.typescriptlang.org/docs/handbook/basic-types.html#never