如何知道传入变量是否属于特定的枚举类型?

Koe*_*T_X 7 typescript

我有一个具有重载构造函数的类,其中输入参数可以是数字,某个类类型的实例或某个枚举类型的值:

class Person { name: string; };
enum PersonType { Type1, Type2 };

constructor(id: number);
constructor(person: Person);
constructor(personType: PersonType);
constructor(arg: string | Person | PersonType)
{
    if (typeof arg === "number") { /* do number stuff */ }
    else if (arg instanceof Person) { /* do Person stuff */ }
    else if (typeof arg === "PersonType") { /* do PersonType stuff */ }
    else throw new MyException("...");
}
Run Code Online (Sandbox Code Playgroud)

现在,很显然,当我在一个枚举值提供情况执行"的typeof ARG",计算结果为"数字",而不是"PersonType",所以我的代码不能正常工作.使用instanceof作为枚举类型也不起作用,因为它仅适用于对象类型.

那么,有人能告诉我当输入参数是特定的枚举类型时我怎么知道的?我在这里失踪了什么?

Pal*_*leo 8

那么,有人能告诉我当输入参数是特定的枚举类型时我怎么知道的?

这是不可能的.查看以下编译代码enum:

打字稿:

enum PersonType { Type1, Type2 }
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

var PersonType;
(function (PersonType) {
    PersonType[PersonType["Type1"] = 0] = "Type1";
    PersonType[PersonType["Type2"] = 1] = "Type2";
})(PersonType || (PersonType = {}));
Run Code Online (Sandbox Code Playgroud)

在运行时,枚举PersonType只是一个用作地图的JavaScript对象.它的成员是字符串和数字.您的示例的枚举包含:

{
  "Type1": 0,
  "Type2": 1,
  "0": "Type1",
  "1": "Type2"
}
Run Code Online (Sandbox Code Playgroud)

因此,成员Type1Type2枚举中的数字是真实数字:

console.log(PersonType.Type1) // 0
Run Code Online (Sandbox Code Playgroud)