TypeScript с использованием части набора перечислений для определения типа переменной - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть enum, который выглядит следующим образом

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;

B.создание нового перечисления для этой задачи, например

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

1 Ответ

0 голосов
/ 24 апреля 2018

Согласно документам машинописи :

Когда все члены перечисления имеют буквальные значения перечисления, в игру вступает некоторая особая семантика.

Во-первых, члены enum также становятся типами! Например, мы можем сказать, что некоторые члены могут иметь значение только члена enum.

Это означает, что опция A действительна, поскольку вы можете использовать перечисления union для достижения того, что вы ищете.

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,
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...