TypeScript 解释never类型的目的

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程