首页 > 解决方案 > TypeScript:获取联合可能类型的名称(作为字符串)?

问题描述

是否可以获得联合可能类型的名称?

鉴于我已经定义了这些接口和类型别名:

// https://basarat.gitbook.io/typescript/type-system/discriminated-unions

interface Square {
    kind: "square";
    size: number;
}

interface Rectangle {
    kind: "rectangle";
    width: number;
    height: number;
}

type Shape = Square | Rectangle;

我可以得到这样的字符串联合吗?

type ShapeName = 'Square' | 'Rectangle';

标签: typescriptdiscriminated-union

解决方案


你可以这样做:

interface Square {
  kind: "square";
  size: number;
}

interface Rectangle {
  kind: "rectangle";
  width: number;
  height: number;
}

type Shape = Square | Rectangle;

type ShapeName = Shape['kind'] // 'square' | 'rectangle';

请记住,除非您映射一些方法,否则您无法获取接口名称。


推荐阅读