视频位置 TypeScript快速梳理_上篇 49:56
void 的含义是空。
1. void 通常⽤于 函数 返回值 声明 ★
void 表示函数不返回任何值(返回值为 空),调⽤者也 不应 依赖 其返回值 进行 任何操作。
function logMessage(msg:string):void{
console.log(msg)
//虽然没有 return, 但是会默认返回 undefined(∈隐式) 说明 undefined 是ts认可的空。
}
logMessage('你好')注意:编码者没有编写 return 指定函数返回值,所以 logMessage 函数是没有显式返回值的,但会有⼀个隐式返回值 ,是 undefined ,虽然函数返回类型为 void ,但也是可以接受 undefined 的。
简单记: undefined 是 void 可以接受的⼀种“空” 。
2. 以下写法均符合规范
// ⽆警告
function logMessage(msg:string):void{
console.log(msg)
}
// ⽆警告
function logMessage(msg:string):void{
console.log(msg)
return;
}
// ⽆警告
function logMessage(msg:string):void{
console.log(msg)
return undefined
}3. 那限制函数返回值时,是不是 undefined 和 void 就没区别呢?
答:有区别。因为还有这句话 :【返回值类型为 void 的函数,调⽤者不应依赖其返回值进⾏任何操作!】
对⽐下⾯两段代码:
function demo1(msg:string):void{
console.log(msg)
}
let result = demo1('你好')
//虽然上面一行能拿到返回值为 undefined, 但是不应该拿 demo1() 的返回值 进行任何操作(所以下面if会报错)。
if(result){ // 此⾏报错:⽆法测试 "void" 类型的表达式的真实性
console.log('demo1有返回值')
}
function logMessage(msg:string):undefined{
console.log(msg)
}
let result = logMessage('你好')
//上面一行拿到的返回值也是 undefined∈基本类型之一。 返回值定义为了 undefined,此时下面的if可以正常判断。
if(result){ // 此⾏⽆警告
console.log('logMessage有返回值')
}理解 void 与 undefined
void 是⼀个⼴泛的概念,⽤来表达“空”,⽽ undefined 则是这种“空”的具体实现。
因此可以说 undefined 是 void 能接受的⼀种“空”的状态。也可以理解为: void 包含 undefined ,但 void 所表达的语义超越了 undefined , void 是⼀种意图上的约定,⽽不仅仅是特定值的限制。
总结:
如果⼀个函数返回类型为 void ,那么:
- 从语法上讲:函数是可以返回 undefined 的,⾄于显式返回,还是隐式返回,这⽆所谓!
- 从语义上讲:函数调⽤者不应关⼼函数返回的值,也不应依赖返回值进⾏任何操作!即使我们知道它返回了 undefined 。
