TypeScript使用枚举集的一部分来定义变量的类型

时间:2018-04-24 13:55:15

标签: typescript

我的枚举看起来像这样

export enum Alignment {
  Top = 'top',
  Right = 'right',
  Bottom = 'bottom',
  Left = 'left',
}

通常我会用它来定义界面,例如反应组件道具如

interface CompProps {
  align: Alignment;
}

但现在想知道我是否只能使用这个枚举的部分,比如

interface CompProps {
  align: `part of Alignment: left and top`;
}

这有共同的模式吗?

我可能会想到:

一个。 align: Alignment.Left | Alignment.Top;

B中。为此任务创建新的枚举,如

enum CompAlignment {
  Top = Alignment.Top,
  Left = Alignment.Left,
}

1 个答案:

答案 0 :(得分:0)

根据typescript docs

  

当枚举中的所有成员都有文字枚举值时,会出现一些特殊的语义。

     

首先,枚举成员也成为了类型!例如,我们可以说某些成员只能拥有枚举成员的值。

这意味着选项A有效,因为您可以利用联合枚举来实现您的目标。

enum ShapeKind {
    Circle,
    Square,
}

interface Circle {
    kind: ShapeKind.Circle;
    radius: number;
}

interface Square {
    kind: ShapeKind.Square;
    sideLength: number;
}

let c: Circle = {
    kind: ShapeKind.Square,
    //    ~~~~~~~~~~~~~~~~ Error!
    radius: 100,
}