我想构建一个检查值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)
工作正常。
答案 0 :(得分:0)
您可以使用
whitespaceVariants.some(v => v===input)
但这似乎是多余的。投射对我来说足够好了
whitespaceVariants.includes(v as (typeof whitespaceVariants)[number])
这是因为推断whitespaceVariants.includes
为类型(typeof whitespaceVariants)[number] => boolean
。这对于推断字符串或数字之类的通用类型很有用,但对除非实现this的文本类型而言无用