Typescript中never 和 void 的区别?
参考答案:
never 和 void 都是用来表示函数的返回类型,但它们有着不同的含义和用途。
下面是两者的区别和使用场景:
1. void
void 类型表示函数没有返回值,通常用于那些没有返回值的函数。可以把它看作是函数的“空”类型,表示该函数执行完毕后没有任何结果返回。
用法:
函数没有返回值时: 当一个函数没有返回任何内容时,我们通常会将其返回类型设置为
void。typescriptfunction logMessage(message: string): void { console.log(message); }这里的
logMessage函数没有返回任何值,因此它的返回类型是void。void与undefined的区别:void表示没有返回值,而undefined是一个实际的值,表示变量未被赋值。- 在
void类型的函数中,返回undefined或不返回任何内容都是允许的,但不能返回其他类型的值。
typescriptfunction example(): void { // 可以返回 `undefined`,也可以不返回任何值 return undefined; }
总结:
void用于表示函数没有返回值。void并不是说函数没有任何副作用,它只是指示该函数不返回任何值。
2. never
never 类型表示从不返回的函数,即这些函数无法正常结束,它们要么会抛出错误,要么会进入无限循环。因此,never 类型表示一个函数永远不会返回。
用法:
抛出错误的函数: 如果一个函数总是抛出错误并且没有正常的返回值(即它的执行会被终止),它的返回类型应该是
never。typescriptfunction throwError(message: string): never { throw new Error(message); }这个
throwError函数抛出一个错误,因此它的返回类型是never。无限循环的函数: 如果一个函数进入一个无限循环,也不返回任何东西,它的返回类型也应该是
never。typescriptfunction infiniteLoop(): never { while (true) { // 无限循环 } }由于
infiniteLoop函数会永远执行下去,永远不会返回,它的返回类型是never。
总结:
never类型用于表示那些不会正常返回的函数,通常是因为它们会抛出异常或进入无限循环。never强调了函数的不可达性,即函数不会正常结束。
3. void 与 never 的区别总结
| 特性 | void | never |
|---|---|---|
| 定义 | 表示没有返回值的函数。 | 表示永远不会返回的函数,通常用于抛出异常或进入无限循环。 |
| 返回值 | 可以返回 undefined,也可以不返回任何值。 | 不能返回任何值,通常抛出异常或进入无限循环。 |
| 用法场景 | 用于没有返回值的函数,如事件处理函数。 | 用于那些无法正常返回的函数,如抛出错误的函数或无限循环函数。 |
| 示例 | function log(): void { console.log('Hello'); } | function throwError(): never { throw new Error('Error'); } |
题目要点:
void表示函数没有返回值,允许函数返回undefined或不返回任何内容。never表示函数不会正常返回,通常是因为它抛出了异常或进入了无限循环,意味着函数的执行不会终止并且不会返回任何值。