我有一个具有重载构造函数的类,其中输入参数可以是数字,某个类类型的实例或某个枚举类型的值:
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作为枚举类型也不起作用,因为它仅适用于对象类型.
那么,有人能告诉我当输入参数是特定的枚举类型时我怎么知道的?我在这里失踪了什么?
那么,有人能告诉我当输入参数是特定的枚举类型时我怎么知道的?
这是不可能的.查看以下编译代码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)
因此,成员Type1和Type2枚举中的数字是真实数字:
console.log(PersonType.Type1) // 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2817 次 |
| 最近记录: |