从Typescript中的标签中获取带标签的联合中的类型

时间:2019-03-18 21:34:31

标签: typescript

我有一个带标签的联合:

type Circle = {type: 'circle', radius: number}
type Square = {type: 'square', size: number}
type Shapes = Circle | Square
type ShapeTypes = Shapes['type']

和一个接受ShapeTypes文字并返回Shapes的函数:

function getShape(type: ShapeTypes): Shapes {
   // irrelevant
}

但是getShape的所有调用者都知道返回类型是Shapes

const circle: Circle = getShape('circle') // error: Type 'Shapes' is not assignable to type 'Circle'

我如何提取正确的类型? type的值始终是文字,因此我觉得编译器具有足够的信息

1 个答案:

答案 0 :(得分:1)

因此似乎可以使用Extract<T, U>

function getShape<T extends ShapeTypes>(type: T): Extract<Shapes, {type: T}> {}