【问题标题】:Typescript type guards don't work when extracting to a function提取到函数时,Typescript 类型保护不起作用
【发布时间】:2018-10-02 05:49:27
【问题描述】:

当我直接使用本机代码时,typescript 知道块内的正确类型,例如:

function test(value: string | string[]) {

    if (Array.isArray(value)) {
        // ts knows that value is array
        return value;
    }

    return value;
}

但是当我试图将逻辑抽象为一个函数时,它不再起作用了。

function isArray(value) {
  return Array.isArray(value);
}

function test(value: string | string[]) {

    if (isArray(value)) {
        return value;
    }

    return value;
}

有一种方法可以在不显式编写 as 关键字的情况下做到这一点?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    Typeguard 有一个特殊的返回类型。您还需要将其添加到您的函数中。

    function isArray(value): value is Array<any> {
        return Array.isArray(value);
    }
    

    【讨论】:

    • isArray 确实定义了该类型,但由于某种原因它不会延续到您的函数中。没有返回类型,它返回布尔值(这是真的,但不是真的)
    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 2022-01-09
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    相关资源
    最近更新 更多