Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeScript:Enum.Value与其他一些Enum.Value不可比较_Typescript - Fatal编程技术网

TypeScript:Enum.Value与其他一些Enum.Value不可比较

TypeScript:Enum.Value与其他一些Enum.Value不可比较,typescript,Typescript,我在一个单独的文件中放置了一个枚举,这样我就可以跨文件使用该枚举 枚举 export enum Category { NotDefined, BackData, Testing, Simulated } 在另一个文件中,我尝试使用我的枚举。我正在尝试编写一个简单的if/else或switch 如果我设置category==category的值,那么测试vscode是很愉快的。 如果我尝试将该值设置为其他值,如下面示例中的“backData”,则会

我在一个单独的文件中放置了一个枚举,这样我就可以跨文件使用该枚举

枚举

export enum Category {
    NotDefined,        
    BackData,
    Testing,
    Simulated
}
在另一个文件中,我尝试使用我的枚举。我正在尝试编写一个简单的if/else或switch

如果我设置category==category的值,那么测试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 {
      ...
    }
}
从'@app/model/Enums.ts'导入{Category};
公共异步提交表单():承诺{
var类别:类别;
category=category.BackData;
开关(类别){
案例(类别测试):{
...
}
默认值:{
...
}
}
if(类别==类别测试){
...
}否则{
...
}
}
将枚举设置为要测试的另一个值时出错

作为一种解决方法(仅用于测试目的),您可以编写:

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"
导出类型IsEqual=[A]扩展[B]?[B] 扩展[A]?真:假:假
enum Foo{
福
}
枚举条{
酒吧
}
枚举FooStr{
Foo=“你好”
}
枚举条{
Bar=“你好”
}
键入WhatType=IsEqual//false。
键入WhatType1=IsEqual//false,即使两者都为0
键入WhatType2=IsEqual//false,即使两者都是“hello”

可能重复的是同一个问题,但我收到的答案与该问题中的答案不同。因此,我将选择不将其标记为副本。