我有一个带标签的联合:
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
的值始终是文字,因此我觉得编译器具有足够的信息
答案 0 :(得分:1)
因此似乎可以使用Extract<T, U>
:
function getShape<T extends ShapeTypes>(type: T): Extract<Shapes, {type: T}> {}