Я поместил перечисление в отдельный файл, чтобы использовать его в разных файлах.
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 {
...
}
}
Ошибка при установке перечисления на другое значение, которое тестирует
2 ответа
В качестве обходного пути (только для целей тестирования) вы можете написать:
category = Category.BackData as Category;
Перечисления 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"
Похожие вопросы
Связанные вопросы
Новые вопросы
typescript
TypeScript — это типизированный надмножество JavaScript, транспилируемое в обычный JavaScript. Он добавляет в JavaScript необязательные типы, классы, интерфейсы и модули. Этот тег предназначен для вопросов, специфичных для TypeScript. Он не используется для общих вопросов по JavaScript.