ts中的void和never类型及区别

 更新时间:2023年05月05日 09:23:40   作者:夏目友人喵  
void类型和never类型都是ts新增的类型,这两者的共同点是都常见用于声明函数的返回值的类型,这里我们把它们两放在一起介绍有助于大家区分,这篇文章主要介绍了ts中的void和never类型及区别,需要的朋友可以参考下

ts中的void和never类型

void

  表示没有任何类型

// 没有返回值的函数,其返回值类型为 void
function warnUser(): void {
    console.log("void");
}
// 申明为 void 类型的变量,只能赋予 undefined 和 null
let unusable: void = undefined;

可以用到void 有以下几种情况

  • 函数没写return
  • 只写了 return, 没有具体的返回值
  • return 的是 undefined
// 如果什么都不写,此时,add 函数的返回值类型为: void
const add = () => {
     //
}
// 如果return之后什么都不写,此时,add 函数的返回值类型为: void
const add = () => { 
     return 
}
const add = (): void => {
  // 此处,返回的 undefined 是 JS 中的一个值
  return undefined
}
// 这种写法是明确指定函数返回值类型为 void,与上面不指定返回值类型相同
const add = (): void => {
    // 
}

never

  表示永远不会有值的一种类型,任何类型都不能赋值给 never 类型的变量

  应用场景???(暂时没找到)

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
    while (true) {
    }
}
// 这个函数不能申明其返回值类型
function warnUser(): void {
    console.log("void");
}
function add (a?: number, b: number = 1) {
  // ?跟在参数名字的后面,表示可选的参数
  // 注意:可选参数只能在 必须参数的后面
  // 如果可选参数在必选参数的前面,会报错
  // 设置了默认值之后,就是可选的了,不写就会使用默认值; 可选的参数一定有值。它们不能一起使用。优先使用默认值
  console.log(111);
}

补充:void类型和never类型

void类型和never类型都是ts新增的类型,这两者的共同点是都常见用于声明函数的返回值的类型,这里我们把它们两放在一起介绍有助于大家区分。 void,表示函数返回值空,即undefined。 never类型则是表示函数没有返回值,也绝不会(never)有返回值的情况发生。

void类型

可以使用变量声明方法去声明void类型,除了underfined之外不能对void类型变量赋值(null也不行),所以平时声明一个void类型的变量没有什么大用,我们一般也只有在函数没有返回值时去声明。

function fn():void{
    return underfined
}

需要注意的是 return null 不能使用于void类型的函数,所以这里我来科普下nullunderfined的区别和联系。

null和underfined相同点: 两者都是js的基本数据类型,都表示“无,没有” 在if 或者 == 隐式类型转化中,null和underfined是相同的,都表示false

null和underfined不同点:
null表示"没有对象",即该处不应该有值。典型用法是:
(1)作为函数的参数,来表示该函数的参数不是对象
(2)作为对象原型链的终点
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2)对象没有赋值的属性,该属性的值为undefined。
(3)函数没有返回值时,默认返回undefined。
(4)调用函数时,应该提供的参数没有提供,该参数等于undefined。

never类型

never类型,也是用于函数的返回值,表示函数永远不会返回结果,js中有函数不返回结果的情况,一般不写return 就返回 undefined,但是这个never是什么都不返回。
比如js 的抛出错误异常函数,就不会返回任何结果:

function err(mag:string):never{
    throw new Error(msg);  
}

到此这篇关于ts中的void和never类型的文章就介绍到这了,更多相关ts void和never内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js简单的分页器插件代码实例

    js简单的分页器插件代码实例

    这篇文章主要介绍了js简单的分页器插件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 跟我学习JScript的Bug与内存管理

    跟我学习JScript的Bug与内存管理

    跟我学习JScript的Bug与内存管理,小编对JScript的Bug与内存管理也不甚了解,所以整理了本篇文章,希望可以解决大家学习时的困扰。
    2015-11-11
  • 使用bootstrap莫名其妙出现横向滚动条的问题及解决

    使用bootstrap莫名其妙出现横向滚动条的问题及解决

    这篇文章主要介绍了使用bootstrap莫名其妙出现横向滚动条的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • JS实现压缩上传图片base64长度功能

    JS实现压缩上传图片base64长度功能

    这篇文章主要介绍了js实现压缩上传图片base64长度功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 微信小程序动态添加view组件的实例代码

    微信小程序动态添加view组件的实例代码

    本文通过实例代码给大家介绍了微信小程序动态添加view组件的方法,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 微信小程序官方动态自定义底部tabBar的例子

    微信小程序官方动态自定义底部tabBar的例子

    这篇文章主要介绍了微信小程序官方动态自定义底部tabBar的例子,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • JavaScript 撑出页面文字换行

    JavaScript 撑出页面文字换行

    最近在做Web 页面,虽然不是很喜欢,不过既然公司安排了,就好好做吧,还是学了不少东西。
    2009-06-06
  • JS对象类型赋值和原生类型赋值原理解析

    JS对象类型赋值和原生类型赋值原理解析

    在本文中,我试图以最简洁的方式来阐明JavaScript编程原理中对象类型赋值和原生类型赋值之间的区别,以及它们各自是如何工作的,感兴趣的朋友跟随小编一起看看吧
    2023-09-09
  • Code Review 方法论与实践总结梳理

    Code Review 方法论与实践总结梳理

    这篇文章主要为大家介绍了Code Review 方法论与实践总结梳理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • TypeScript遍历Array的方法(for,forEach,every)

    TypeScript遍历Array的方法(for,forEach,every)

    本文主要介绍了TypeScript遍历Array的方法(for,forEach,every),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论