在 TypeScript 中,never 类型表示那些永远不会发生的类型。它通常用于表示
不可到达的代码分支或抛出异常的函数
。
对于 never 类型,只有 never 类型本身可以赋值给 never 类型。但是,并不是所有类型都可以赋值给 never 类型。
1、never类型说明
let abc: never;
let abc2: never;
// abc = 123 // 报错
// abc = '23' // 报错
// abc = {} // 报错
2、用处1
type requestType = "get" | "post";
function request(method: requestType) {
if (method == "get") {
console.log("get");
} else if (method == "post") {
console.log("post");
} else {
// 在这个里面 method 是 never类型
const paramCheck: never = method;
}
}
TS是可以
类型收窄
的,在 else 里面,把收窄为 never 类型的 method 赋值给 never类型的paramCheck,是没有问题的,是可以编译通过的
但是如果它改变了 requestType 类型,增加了一个
delete 类型
,那么就会报错,因为在else 里面类型被收窄为了, delete,delete 赋值给 never 类型的变量会报错,产生一个编译错误
所以通过这个方法,可以确保 reqest 函数,总是穷尽了所有 requestType 的可能类型
3、用处2
书写一个函数,他的参数,
必须是number 类型
,不然就报错
//
// T extends number ,可以判断 T 到底是不是number 类型,如果不是的话,这个入参就是 never 类型,不是never类型的值,赋值给never 类型会报错
function addNumber<T>(a: T extends number ? T : never) {
return a;
}
addNumber(23);
addNumber("23");