void(空类型)
JS 中是没有空值(Void)的概念,但是在 TS 中,我们可以用 void 表示没有任何返回值的函数。在TypeScript 中的 void 是 undefined 的子类型。JavaScript 中的函数总是会返回给我们一些数据。要么是一个值,要么是 undefined。没有返回值的函数总是给我们返回 undefined,并且 void 在 JavaScript 中总是返回 undefined,因此 TypeScript 中的 void 是告诉开发人员此函数是返回 undefined 的合适类型。
声明对象类型为void
时
- 返回为空值
function func(): void { }
声明一个变量为void
时
- 只能将它赋值为 undefined 和 null,因此在定义函数的返回值为
void
时,也可return undefined/null
let voidValue1: void = undefined;
let voidValue2: void = null;
never(不存在的值类型)
never
类型表示永不存在的值的类型。具有以下特点:
never
类型是所有类型的子类型,即never
类型可以赋值给任何类型。- 其他任何类型均不是
never
类型的子类型,即其他类型均不可赋值给never
类型,除了never本身。即使any类型也不可以赋值给never类型。 - 返回类型为
never
的函数中,其终点必须是不可执行的,例如函数过程中抛出了错误或者存在死循环。 - 变量也可以声明为
never
类型,但其不能被赋值
设置变量类型为never
,表示永远不能执行完或者永远Error,具体示例如下:
- 函数中出现了死循环,永远不能执行完,因此其函数类型为:() => never
function infiniteLoop(): never {
while (true) { }
return 'over'
}
- 函数中出现报错,不会执行到
return over
,因此其函数类型为:() => never
function errFunc(): never {
throw new Error()
return 'over'
}
void与never的区别
void类型可以用于声明函数的返回值类型来表示函数没有任何返回值,但是void表示的意思就变得很模糊了。使用void的话,函数是可以返回undefined的,而采用never则不允许函数返回undefined。实际项目开发中,我们不能完全依赖于TypeScript设置的类型推断系统来帮助我们生成正确的类型信息。当需要明确表明函数无返回值时,需要将其返回值类型指定为never。