我的问题最好用一个例子来说明:
interface A { tpe: 'a' }
interface B { tpe: 'b' }
type AB = A | B
const abMaker = (ab: AB): AB => {
return { tpe: ab.tpe }
}
此处的return语句具有以下错误:
Type '{ tpe: "a" | "b"; }' is not assignable to type 'B'.
Types of property 'tpe' are incompatible.
Type '"a" | "b"' is not assignable to type '"b"'.
Type '"a"' is not assignable to type '"b"'.
编译器无法推断返回的值是有效的AB
,因为类型"a" | "b"
的值对 A
或分别B
。
我可以通过“类型检查” tpe
的值来使其工作:
const abMaker = (ab: AB): AB => {
switch (ab.tpe) {
case 'a': return { tpe: ab.tpe }
case 'b': return { tpe: ab.tpe }
}
}
有更好的方法吗?