小编Whi*_*ght的帖子

如何分解TypeScript“ Discriminated Union”开关块并同时使其详尽无遗

对于我的应用程序,我使用了TypeScript 手册中所述的带有完全检查性的“ Discriminated Union”模式。时间流逝,最终我的交换机最终包含了50多个案例。

所以我的问题是:是否有任何好的解决方案可以分解此开关而又不会使其穷举呢?

换句话说,如何将其拆分,如果可以帮助的话,我可以在逻辑上按子类型划分这些并集(例如,下面的形状可以对等边和其他形状进行划分):

interface Square {
    kind: "square";
    size: number;
}
interface Rectangle {
    kind: "rectangle";
    width: number;
    height: number;
}
interface Circle {
    kind: "circle";
    radius: number;
}

//... 50 more shape kinds

type Equilateral = Square | Circle /*| 25 more...*/;
type Other = Rectangle /*| 25 more...*/;

type Shape = Equilateral |  Other;

function assertNever(x: never): never {
    throw new Error("Unexpected object: " + x);
}
function area(s: Shape) {
    switch (s.kind) { …
Run Code Online (Sandbox Code Playgroud)

functional-programming discriminated-union typescript

4
推荐指数
1
解决办法
115
查看次数