Я поместил перечисление в отдельный файл, чтобы использовать его в разных файлах.

Enums.ts

export enum Category {
    NotDefined,        
    BackData,
    Testing,
    Simulated
}

В другом файле я пытаюсь использовать мое перечисление. Я пытаюсь написать простой if / else или switch.

Если я установлю значение категории == Category.Testing vscode счастлив. Если я пытаюсь установить значение на что-то другое, например, «backData», как в примере ниже, я получаю ошибку:

Type 'Category.Testing' is not comparable to type 'Category.BackData' 

Пример кода:

import { Category } from '@app/model/Enums.ts';

public async SubmitForm(): Promise<Boolean> {
    var category: Category;
    category = Category.BackData;

    switch (category) {
      case (Category.Testing): {
        ...
      }
      default: {
        ...
      }
    }

    if (category == Category.Testing) {
      ...
    } else {
      ...
    }
}

Ошибка при установке перечисления на другое значение, которое тестирует

enter image description here

0
Tony 19 Авг 2019 в 04:13

2 ответа

Лучший ответ

В качестве обходного пути (только для целей тестирования) вы можете написать:

category = Category.BackData as Category;
1
Shalom Peles 19 Авг 2019 в 01:25

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

export type IsEqual<A, B> = [A] extends [B] ? [B] extends [A] ? true : false : false

enum Foo {
    Foo
}

enum Bar {
    Bar
}

enum FooStr {
    Foo  = "hello"
}

enum BarStr {
    Bar = "hello"
}

type WhatType = IsEqual<Foo, Bar> // false.
type WhatType1 = IsEqual<Foo.Foo, Bar.Bar> // false even though both are 0
type WhatType2 = IsEqual<FooStr.Foo, BarStr.Bar> // false even though both are "hello"
0
Shanon Jackson 19 Авг 2019 в 03:17