TypeScript中的never应用场景
创始人
2024-03-12 20:38:46
0

一、了解never类型

ts的文档

在TypeScript中never就是Bottom Type,意味着一个不表示任何类型的类型,never不会是任何值,可能会被推断出来,或者自己定义避免出现逻辑上的异常

比如一个函数中是一个死循环或异常,这个函数则不会返回任何东西,那么写返回类型的话,写void或者其他的都不合适,那我们就可以使用never

二、基本类型never使用

never单独使用的场景比较少,一般在封装工具时用的多。当在封装工具时,逻辑没有处理完,never就会报错。相当于是一种逻辑判断,当处理完成后则不会报错,更严谨逻辑判断

2.1 一个简单的例子

function showMessage(info:string | number){console.log(info)
}
showMessage("字符串")
showMessage(123);

代码看起来没什么问题,假设某天这个函数又多了个对象参数

showMessage(info:string | number | object)

很常见的场景就是我们希望,将所有的参数类型都能匹配到,对每个联合类型进行特殊处理。在上面代码中,如果忘记处理了object类型情况,Ts也不会报错。

那么,要怎么在漏处理类型的时候抛出错误呢?我们能在每一个 default 的 语法块中将变量的类型收窄到对应的值。

function showMessage(info:string | number | object){switch(typeof info){case "string":console.log(info)break;case "number":console.log(info)break;default://....}
}

在最后的 default 语句块中,如果我们还使用这个变量,那么它就会被智能推导为 boolean 类型。这肯定不是我们想看到的,它都走到兜底语句块了还有未收窄过的类型。所以我们简单粗暴的把它赋值为 never

function showMessage(info:string | number | object){switch(typeof info){case "string":console.log(info)break;case "number":console.log(info)break;default:const Check:never = info;//Type 'object' is not assignable to type 'never'}
}

报错了,不能将obj赋值给never,我们再加个处理Object的case

function showMessage(info:string | number | object){switch(typeof info){case "string":console.log(info)break;case "number":console.log(info)break;case "object":console.log(info);break;default:const Check:never = info;//....}
}

现在就没问题了,因为在穷举完所有类型分支后,info的类型当然就也是 never 啦。这样做只是从 TypeScript 类型层面避免了遗漏,为了安全起见,我们可以在 default 兜底语句中抛出一个错误:

const Check:never = info;
throw new Error(`Unknown input type: ${Check}`);

相关内容

热门资讯

国务院常务会议解读丨事关水上交... 转自:千龙网新华社北京5月9日电(记者叶昊鸣)9日召开的国务院常务会议研究《国家水上交通安全监管和救...
加拿大航空赴美机票预订量下降 9日,加拿大航空公司首席执行官鲁索表示,受贸易紧张局势等因素影响,未来6个月该航空公司的加拿大赴美机...
新地王与底价 上海四批次土拍收... (转自:观点网)观点网 5月9日,上海迎来了2025年的四批次土拍。本次土拍共出让4宗地块,分别为虹...
社论丨中国出口结构持续优化,贸... 近日,海关总署发布2025年4月外贸数据。以美元计价,我国出口同比增长8.1%,保持稳健增长;进口同...
连云港法院明确“烂尾楼”按揭贷... 转自:扬子晚报扬子晚报网5月9日讯(记者 孙锐)开发商逾期交房导致购房合同解除后,剩余按揭贷款究竟该...
工行回应金条掺假:消息不实,疑... 新京报贝壳财经讯(记者姜樊)5月9日,工商银行上海市嘉定支行针对网传金条“掺假”传闻发布公告称,一位...
评论丨巴菲特为何长期持有日本商... 近日,巴菲特在伯克希尔公司股东大会上宣称,将长期持有日本五大商社的股份,并在今后50年里不考虑出售。...
商场收费充电桩怎么成了“价格刺... 2021年,上海新能源车渗透率突破30%。政府大力推广充电桩建设,很多人选择新能源车时,"充电比加油...
C视频丨共享单车上张贴非法广告... 川观新闻记者 唐子晴 视频剪辑 王帅小额贷款、代开发票、非法网站......这些被诟病的非法小广告,...
中信银行、招商银行拟出资设立金... 银行系AIC(金融资产投资公司)队伍正加速扩容。继5月7日国家金融监督管理总局发布《关于筹建兴银金融...
中俄就应对美加征所谓“对等关税... 5月8日,商务部部长王文涛在莫斯科会见俄罗斯经济发展部部长列舍特尼科夫,围绕落实中俄升级版投保协定、...
【财经分析】累计增速连续上行,... 新华财经北京5月10日电(记者邹多为、张晓洁) 海关总署5月9日发布数据:今年前4个月,我国货物贸易...
【环球财经】英国金融时报100... 转自:新华财经新华财经伦敦5月9日电(记者赵阳) 英国伦敦股市《金融时报》100种股票平均价格指数9...
墨西哥宣布就“墨西哥湾”更名一... 转自:财联社【墨西哥宣布就“墨西哥湾”更名一事起诉谷歌】财联社5月10日电,墨西哥总统辛鲍姆宣布,该...
中国高规格出席俄罗斯“5·9”... 中新社北京5月9日电 (记者 李晓喻)当地时间5月9日,中国国家主席习近平和来自世界20多个国家及国...
韩国执政党更换总统大选候选人 转自:财联社【韩国执政党更换总统大选候选人】财联社5月10日电,由于韩国执政党国民力量党总统候选人金...
前4个月我国货物贸易进出口总值... 转自:证券日报    本报记者 韩昱    5月9日,今年前4个月外贸进出口成绩单出炉。据海关总署发...
马云现身阿里总部! 5月10日是第21个“阿里日”。5月9日晚,马云现身阿里总部湖畔小屋,现场鼓励员工坚持创业精神。湖畔...
工行回应“两款售出金条疑似有杂... 澎湃新闻记者 胡志挺工商银行对网传一客户在该行购买金条发现疑似杂质相关情况作出正式回应。5月9日晚间...
靠美国关税撑起不锈钢30%的增...  5月 27-28日,天津东凯悦酒店,2025 (第九届) 不锈钢产业发展大会 将在渤海之滨隆重召开...