我正在编写一个函数,当输入为假时,该函数返回 undefined。在 TypeScript 5.6.2 中,我无法让以下示例通过类型检查器:
// Return type: number | "" | undefined
const f1 = (s: string, n: number) => (s || undefined) && n;
// Type 'number | "" | undefined' is not assignable to type 'number | undefined'.
// Type 'string' is not assignable to type 'number'.(2322)
const x: number | undefined = f1("a", 1);
推断的返回类型表明f1
可能返回空字符串。这很烦人,因为我需要处理不可能的字符串返回类型。我认为返回类型应该是number | undefined
。
当字符串和数字交换时也会发生同样的事情:
// Return type: string | 0 | undefined
const f2 = (s: string, n: number) => (n || undefined) && s;
当我使用三元运算符或强制转换为布尔值时,返回类型被正确推断:
// Return type: number | undefined
const f3 = (s: string, n: number) => (s ? true : undefined) && n;
// Return type: number | undefined
const f4 = (s: string, n: number) => (!!s || undefined) && n;