我有一个具有重载构造函数的类,其中input参数可以是数字,某个类类型的实例或某个枚举类型的值:
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("...");
}
现在,显然,当我执行“typeof arg”以防提供枚举值时,它会计算为“number”而不是“PersonType”,因此我的代码无法按预期工作。 使用instanceof作为枚举类型也不起作用,因为它只适用于对象类型。
那么,有人能告诉我当输入参数是特定的枚举类型时我怎么知道的?我在这里缺少什么?
答案 0 :(得分:8)
那么,有人能告诉我当输入参数是特定的枚举类型时我怎么知道的?
这是不可能的。查看enum
的编译代码:
打字稿:
enum PersonType { Type1, Type2 }
JavaScript的:
var PersonType;
(function (PersonType) {
PersonType[PersonType["Type1"] = 0] = "Type1";
PersonType[PersonType["Type2"] = 1] = "Type2";
})(PersonType || (PersonType = {}));
在运行时,枚举PersonType
只是一个用作地图的JavaScript对象。它的成员是字符串和数字。您的示例的枚举包含:
{
"Type1": 0,
"Type2": 1,
"0": "Type1",
"1": "Type2"
}
因此,枚举中的成员Type1
和Type2
是真实的数字:
console.log(PersonType.Type1) // 0
答案 1 :(得分:0)