gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:37:31 25 4
gpt4 key购买 nike

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

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 也不起作用,因为它仅适用于对象类型。

那么,谁能告诉我如何才能知道我的输入参数何时属于特定枚举类型?我在这里缺少什么?

最佳答案

So, can anyone tell me how I can get to know when my input argument is of a specific enum type?

这是不可能的。查看 enum 的编译代码:

typescript :

enum PersonType { Type1, Type2 }

JavaScript:

var PersonType;
(function (PersonType) {
PersonType[PersonType["Type1"] = 0] = "Type1";
PersonType[PersonType["Type2"] = 1] = "Type2";
})(PersonType || (PersonType = {}));

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

{
"Type1": 0,
"Type2": 1,
"0": "Type1",
"1": "Type2"
}

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

console.log(PersonType.Type1) // 0

关于typescript - 如何知道传入变量是否属于特定枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38014385/

25 4 0
文章推荐: node.js - 有条件地导入以切换实现
文章推荐: php - 使用 AJAX 和 PHP 将 附加到