目录
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类型的函数,所以这里我来科普下null和underfined的区别和联系。
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); }