【发布时间】:2021-09-14 09:48:56
【问题描述】:
enum ShapeType { Circle, Square }
interface Circle {
kind: ShapeType.Circle,
radius: number
}
interface Square {
kind: ShapeType.Square,
sideLength: number
}
type Shape = Circle | Square
type WhatShape<T extends ShapeType> // <-- can we do without WhatShape?
= T extends ShapeType.Circle ? Circle
: T extends ShapeType.Square ? Square
: never;
type ShapeMap = {
[K in ShapeType]: (s: WhatShape<K>) => void
}
const handlers: ShapeMap = {
[ShapeType.Circle]: (c: Circle) => {
console.log(c.radius)
},
[ShapeType.Square]: s/*inferred!*/ => {
console.log(s.sideLength)
},
}
这可行,但必须维护 WhatShape 以将枚举映射回形状类型有点烦人。
TS 有什么方法可以从kind 推断出我们的ShapeMap 的参数类型?
【问题讨论】:
标签: typescript