用鉴别符字段创建类型并集的值

时间:2019-07-10 16:12:39

标签: typescript types

我的问题最好用一个例子来说明:

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 }
  }
}

有更好的方法吗?

0 个答案:

没有答案