使用固定值数组进行类型检查

时间:2019-04-29 15:15:30

标签: typescript

我想构建一个检查值X是否在另一个数组中或返回默认值的函数。我正在使用包含。凭直觉,我会说X应该是未知的,或者说string | undefined,但是它们失败了:

Argument of type 'unknown' is not assignable to parameter of type '"nowrap" | "normal" | "pre-line"'. 

因此,我使用any,现在可以使用了。但是我发现那很奇怪。为什么我的想法错了?

const wraps = ["nowrap", "wrap", "foo"]

function isBla(input: unknown):  typeof wraps[number] {
    if(wraps.includes(input)) {
        return input;
    }

    return "nowrap"
}

上述错误。而 function isBla(input: any)工作正常。

1 个答案:

答案 0 :(得分:0)

您可以使用

whitespaceVariants.some(v => v===input)

但这似乎是多余的。投射对我来说足够好了

whitespaceVariants.includes(v as (typeof whitespaceVariants)[number])

这是因为推断whitespaceVariants.includes为类型(typeof whitespaceVariants)[number] => boolean。这对于推断字符串或​​数字之类的通用类型很有用,但对除非实现this的文本类型而言无用