解释 TypeScript 中 never 类型的用途
TypeScript 是一种严格类型的语言,我们需要为每个变量定义类型。此外,我们需要定义函数的返回类型和函数参数的类型。
never 也是 TypeScript 中的一种类型,就像其他数据类型(如字符串、数字、布尔值、符号等)一样。我们可以使用"never"关键字来创建 never 类型的变量。
当用户确定任何永远不会发生的情况时,他们可以使用 never 类型。例如,当我们确定函数永远不会返回任何值时,我们可以使用 never 作为返回类型。
语法
用户可以按照以下语法将 never 类型用作变量的文字。
// never 类型作为变量文字 let variable: never; // never 类型为函数返回类型 function func(): never { // 编写任何条件,使函数不应返回任何值 }
在上述语法中,变量类型为 never,这意味着我们永远不能将任何值存储到变量中。此外,函数的返回类型为 never,这意味着我们永远不能从函数返回值。
示例 1:使用 never 关键字作为文字
在下面的示例中,我们定义了变量并将 never 关键字用作文字。之后,用户可以看到我们无法为 never 类型的变量赋值。如果我们尝试为 never 类型的变量赋值,TypeScript 编译器会生成错误。
// never 类型为变量文字 let variable: never; // 以下代码生成错误消息,如"类型 'number' 不能分配给类型 'never'"。 // variable = 10; // 初始化变量之前,我们无法打印变量。 // console.log(variable); // 这不起作用,因为我们无法将值分配给 never 类型的变量 // let variable2: never = 10; console.log("处理 never 类型的变量")
编译后,它负责生成以下 JavaScript 代码 -
// never 类型为变量文字 var variable; // 以下代码生成错误消息,如"类型 'number' 不能分配给类型 'never'"。 // variable = 10; // 初始化变量之前,我们无法打印变量。 // console.log(variable); // 这不会起作用,因为我们无法将值分配给 never 类型的变量 // let variable2: never = 10; console.log("处理 never 类型的变量");
上述代码将产生以下输出 −
输出
处理 never 类型的变量
示例 2:使用"never"作为函数的返回类型
在下面的示例中,我们创建了示例和测试函数。示例函数无限次运行 while 循环,并且永远不会停止。测试函数也无限次运行 for 循环,因此它永远不会返回值,我们可以使用 never 作为函数的返回类型。
此外,用户可以看到,sample() 函数永远不会被 TypeScript 调用,因为 test() 函数的执行永远不会停止。
// 定义示例函数,该函数永远不会返回值,也永远不会停止执行 function sample(param1: string): never { while (true) { console.log("The value of the param1 is " + param1); } } // 测试函数,将无限次返回 for 循环 function test(param2: number): never { for (let i = 0; ; ) { console.log("The value of param2 is " + param2); } } // 调用测试函数 test(20); // 调用示例函数 // 示例函数永远不会被调用,因为测试函数永远不会停止 sample("Hello");
编译后,它负责生成以下 JavaScript 代码 -
// 定义示例函数,它永远不会返回值,也永远不会停止执行 function sample(param1) { while (true) { console.log("The value of the param1 is " + param1); } } // 测试函数,将返回无限时间的循环 function test(param2) { for (var i = 0;;) { console.log("The value of param2 is " + param2); } } // 调用测试函数 test(20); // 调用示例函数 // 示例函数从未调用,因为测试函数永远不会停止 sample("Hello");
示例 3
在此示例中,我们创建了错误函数,该函数始终会抛出错误。因此,它永远不会从函数返回任何值。之后,我们从 sample() 函数调用 error() 函数。
在输出中,用户可以观察到以下代码显示错误。
// 始终抛出错误的函数 function error(): never { throw new Error("返回类型中的错误!"); } // 从 sample() 函数调用 error() 函数 function sample() { return error(); } sample();
编译后,它负责生成以下 JavaScript 代码 -
// 总是抛出错误的函数 function error() { throw new Error("返回类型错误!"); } // 从 sample() 函数调用 error() 函数 function sample() { return error(); } sample();
上述代码将产生以下输出 −
输出
Error: Errors in the return type!
将 never 类型用作与其他数据类型的并集或交集
我们可以将 never 类型用作与其他数据类型(如数字、字符串或布尔值)的文字。如果我们取 never 类型和数字类型的并集,则变量变为数字类型。
如果我们取 never 类型和数字类型的交集,则 never 类型始终覆盖,变量变为 never 类型。
语法
用户可以按照以下语法将 never 类型用作另一种数据类型的并集和交集。
let var1: never | number; let var2: never & number;
在上述语法中,var1 是 never 或 number 类型,而 var2 是 never 和 number 类型,这意味着 never 类型总是覆盖 number 类型。
示例 4
在下面的示例中,用户可以看到我们可以将 number 值分配给 var1,因为 number 类型覆盖了 never 类型。此外,我们不能将值分配给 var2,因为 never 类型覆盖了 number 数据类型。
let var1: never | number; let var2: never & number; // 我们可以为 var1 赋值,因为它是 number 类型 var1 = 30; // 我们不能为 var2 赋值,因为它是 never 类型 // var2 = 30; console.log("var1 的值为 " + var1);
编译后,它将会生成以下 JavaScript 代码 -
var var1; var var2; // 我们可以给 var1 赋值,因为它是数字类型 var1 = 30; // 我们不能给 var2 赋值,因为它是 never 类型 // var2 = 30; console.log("var1 的值为 " + var1);
上面的代码将产生以下输出 -
var1 的值为 30
在本教程中,用户了解了 TypeScript 中的 never type。我们通过不同的示例了解了 never type 的不同用例。当我们使用 never 作为函数的返回类型时,该函数应该包含任何永远不会允许该函数返回值的条件。