【发布时间】:2020-06-25 11:38:20
【问题描述】:
Typescript 有什么方法可以推断出b 也属于U extends Foo ? string : number 类型?如果a 是U extends Foo ? string : number 类型,那么在真正的分支中向字符串添加一个数字将导致字符串。在 false 分支中,将一个数字添加到 number 最终将成为一个数字。因此,我希望b 的类型也可以推断为U extends Foo ? string : number。或者这是一个错误的假设?
当我运行下面的 sn-p 时,出现以下错误:
运算符 '+' 不能应用于类型 'U extends Foo ?字符串:数字'和'数字'。(2365)
interface Foo {
propA: boolean;
propB: boolean;
}
declare function f<T>(x: T): T extends Foo ? string : number;
function foo<U>(x: U, d: number) {
const a = f(x);
const b = a + 2;
}
【问题讨论】:
-
错误是告诉你不应该在字符串中添加数字。
-
您可以在字符串中添加数字。这会产生一个字符串。 Typescript 对此没有任何问题:Playground Link
-
不使用工会:
function add(s: string | number) { return s + 1; } // Error -
a是条件类型,不是联合类型
标签: typescript