视频位置 TypeScript快速梳理_中篇 视频位置 00:49:00

需要先把 7.4 void 学会,才能学这里。

先来观察如下两段代码

代码段1(正常)

在函数定义时,限制函数返回值为 void ,那么函数的返回值就必须是空。

//void 只能接收一种空,就是 undefined

function demo():void{
    // 返回undefined合法
    //如果不写,那么默认返回的也是 undefined
    return undefined

    // 以下返回均不合法
    return 100
    return false
    return null
    return []
}

//调用:
demo()

代码段2(特殊)

使⽤ 类型声明 限制函数返回值为 void 时, TypeScript 并不会严格要求函数返回空

//自定义一个类型,这个类型叫 LogFunc
//() => void //表示一个函数,该函数不接收任何参数,该函数的返回值是void。
type LogFunc = () => void

//f1 是变量, 类型为 LogFunc
const f1: LogFunc = () => {
    return 999; // 允许返回 ⾮空值
};
const f2: LogFunc = () => 200; // 允许返回 ⾮空值
const f3: LogFunc = function () {
    return 300; // 允许返回 ⾮空值
};

为什么会这样?

官网说: 是为了确保如下代码成⽴,我们知道 Array.prototype.push 的返回值是⼀个数字,⽽ Array.prototype.forEach ⽅法期望其回调的返回类型是 void 。

const src = [1, 2, 3];
const dst = [0];

//如果箭头函数只有一句,那么此时返回值就是这句的执行结果。此处.push()返回的是当前数组的长度。
src.forEach( (el) => dst.push(el) );

官⽅⽂档的说明:Assignability of Functions