TypeScript的新类型(三):never

定义

never 的含义是:任何值都不是,不能有值任何值都不行,例如undefined、null、'' 、0都不⾏!

  • 几乎 不用 never去限制变量,因为是没有意义的
  • never可以在函数中限制 不能有返回值 (不写return(显式返回值)也不行,js函数默认返回undefined(隐式返回值)),返回"从不"的函数不能具有可访问的终结点
ts 复制代码
let str: never
str = 'hello' // 抱错:不能将类型""hello""分配给类型"never"
function demo1(): never{} // 抱错:返回"从不"的函数不能具有可访问的终结点。(因为js函数默认返回undefined)
function demo2(): never{return: 0} // 抱错:返回"从不"的函数不能具有可访问的终结点

使用never限制函数不能有返回值的两种情况

  • never就是限制函数 永远不能 正常运行结束
  1. 死循环
  2. 抛出错误
ts 复制代码
// 【死循环】
function fun1(): never{
  fun1()
}
// 【抛出错误】
function fun2(): never{
  throw new Error('err')
}

never⼀般是ts主动推断出来的

ts 复制代码
let str: string
str = 'hello'
if(typeof str === 'string'){
  console.log(str.toUpperCase())
}
else{
  console.log(str) // 提示:let str: never。只有str是never类型才能执行到这,表示没有任何值能走到这一行。
}
相关推荐
Rain5094 分钟前
谁动了我的 URL?——记一次微前端“灵异 Bug“的排查实录
前端·vue.js·人工智能·前端框架·bug·ai编程
程序员阿明11 分钟前
spring boot4+springAI 2加redis多轮对话存储
spring boot·redis·后端
MetaLite26 分钟前
SpringBoot整合FastJson2数据脱敏-接口日志与失败降级
java·spring boot·后端
xixingzhe227 分钟前
SpringBoot 接口缓存实现
spring boot·后端·缓存
bjzhang7527 分钟前
使用HTML+CSS美化上传进度条展示
前端·css·html
何以解忧,唯有..34 分钟前
Vue 3 响应式核心:ref() 与 reactive() 的深入解析与实战
前端·javascript·vue.js
名字还没想好☜37 分钟前
Go 时间格式化为什么用 2006-01-02:time.Format/Parse 的参考时间、时区与解析踩坑
开发语言·后端·golang·go
晴天1638 分钟前
Chrome DevTools Protocol(CDP)分享-Day36
前端·chrome·chrome devtools
风骏时光牛马39 分钟前
程序员的职场成长:技术之外,更要修炼底层思考力
前端
YWL40 分钟前
CSS变量与预处理器
前端·css