Каков тип перечисления на машинописном языке

#angular #typescript

#angular #typescript

Вопрос:

Мне интересно, каков тип перечисления? В моем примере мне нужно ссылаться на мое Direction перечисление в моем шаблоне. Я делаю это, присваивая Direction перечисление direction переменной, которую я предоставил в своем компоненте. В настоящее время эта переменная имеет тип any , но я хочу быть более конкретным. Каким должен быть этот тип?

 <!-- component.html -->
<p [ngSwitch="getDirection()"]>
    <span *ngSwitchCase="direction.NORTH">Heading North</span>
    <span *ngSwitchCase="direction.EAST">Heading East</span>
</p>


// component.ts
enum Direction {
  NORTH,
  EAST,
  SOUTH,
  WEST
}
direction: any; // <-- what should this type be?
constructor() {
  this.direction = Direction;
}
 

Комментарии:

1. direction$: Direction . Не усложняйте это, чем это должно быть :).

2. Я пробовал это, но this.direction$ подсвечивается ошибкой Type 'typeof Direction' is not assignable to type 'Direction'

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

4. direction$: typeof Direction; должно быть в порядке

5. @TomaszGawel — потрясающе, typeof Direction сделал свое дело. Можете ли вы ответить ответом, чтобы я мог пометить его как правильный ответ?

Ответ №1:

 direction$: typeof Direction;
 

Должно быть в порядке.

Но на самом деле вам это не нужно. Вы можете позволить typescript определять этот тип:

 enum Direction { NORTH, EAST, SOUTH, WEST }

class MyComponent {
  readonly direction$ = Direction;
  constructor() {
    //...
  }
}
 

В этом случае нет необходимости ждать инициализации до вызова конструктора, так как все известно заранее.

Теперь вы можете навести указатель мыши на $ field и увидеть его предполагаемый тип (я предполагаю, что вы используете vscode).