解释在 TypeScript 中从不输入的目的
never类型表示从不出现的各种类型的值。这意味着它可能是从不返回特定值的函数的返回类型。在本文中,我们将了解 TypeScript 中的 never 类型以及使用它的原因。
句法:
// For variable
const GFG : never;
// For function
function geeks(): never {
const geeksForGeeks = 1;
}
以下示例将说明never type well 的用途或用法:
示例 1:此示例表示从未发生的函数的返回类型。由于无限循环,无法确定返回类型。
Javascript
// Function which executes an infinite
// amount of times and never ends.
function infiniteLoop(): never{
while(true){
console.log('GeekforGeeks');
}
}
Javascript
// Function always throwing an error/exception
function err(message: string): never{
throw Error(message);
}
err("My error!");
Javascript
// Function demonstrating exhaustive checks
function f(temp: string | number): boolean {
if (typeof temp === "string") {
return true;
} else if (typeof temp === "number") {
return false;
}
// Not a string or a number. Value can't
// occur here hence type is "never"
return fail("Unexhaustive");
}
function fail(msg: string): never {
throw new Error(msg);
}
console.log(f(23)); // Number
console.log(f("String")); // String
Javascript
type SomeNonNullable = T extends null | undefined ? never : T;
type A = SomeNonNullable;
type B = SomeNonNullable;
type C = SomeNonNullable;
const x: A = true; // Boolean
const y: B = 1; // Number
const z: C = undefined; // Will return an error
输出:
由于程序中存在无限循环,它可能会使程序崩溃或冻结您的计算机。执行将自动停止,并且不生成任何输出。
示例 2:此示例还表示一个从不发生的函数的返回类型。但不同的是,函数总是抛出错误或异常。
Javascript
// Function always throwing an error/exception
function err(message: string): never{
throw Error(message);
}
err("My error!");
输出:
示例 3:在这里,如果变量temp既不是字符串也不是数字,则它具有从未分配给它的类型,因为 TypeScript 已确定没有任何剩余。
Javascript
// Function demonstrating exhaustive checks
function f(temp: string | number): boolean {
if (typeof temp === "string") {
return true;
} else if (typeof temp === "number") {
return false;
}
// Not a string or a number. Value can't
// occur here hence type is "never"
return fail("Unexhaustive");
}
function fail(msg: string): never {
throw new Error(msg);
}
console.log(f(23)); // Number
console.log(f("String")); // String
输出:
在每个实例中,由于没有定义的返回类型注释或任何可到达的端点,TypeScript 会自动推断never类型。
除了更好的类型安全性,如上面的示例中清楚地展示的那样, never类型还有另一个常见的用例,即条件类型。可以从程序中排除不需要的类型。
示例 4:下面的代码片段给出了一个想法:
Javascript
type SomeNonNullable = T extends null | undefined ? never : T;
type A = SomeNonNullable;
type B = SomeNonNullable;
type C = SomeNonNullable;
const x: A = true; // Boolean
const y: B = 1; // Number
const z: C = undefined; // Will return an error
输出:
在这里,我们正在检查T是否为空或未定义。如果是,那么我们指出它不应该是可访问的(无法访问的代码)。