繁体   English   中英

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

[英]TypeScript using part of enum set to define type of variable

我有看起来像这样的枚举

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

通常,我会在定义接口时使用它,例如对组件道具进行反应

interface CompProps {
  align: Alignment;
}

但是现在想知道我是否只能使用该枚举的一部分,例如

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

是否有一个通用的模式?

我可能会想到:

A. align: Alignment.Left | Alignment.Top; align: Alignment.Left | Alignment.Top;

B.为此任务创建新的枚举

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

根据打字稿文档

当枚举中的所有成员都具有文字枚举值时,就会使用一些特殊的语义。

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

这意味着选项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,
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM