我是Java程序员很长一段时间,现在我正在研究Angular,这让我学习了TypeScript。
我正在开发一些简单的练习方法,我遇到了一种情况,即在Java世界中我会创建一个Enum。
从我看到的TypeScript支持这个Enum概念,然而,与Java相比,它是非常有限的。
要解决TypeScript中Enum的局限性我想过使用一个行为类似枚举的类。
根据TypeScript世界中的良好做法,下面的实现是否“正常”?
是否可以在TypeScript中实现接收Java中的参数?或者这真的只能通过课程来实现吗?
export class MyEnum {
public static readonly ENUM_VALUE1 = new MyEnum('val1_prop1', 'val1_prop2');
public static readonly ENUM_VALUE2 = new MyEnum('val2_prop1', 'val2_prop2');
public static readonly ENUM_VALUE3 = new MyEnum('val3_prop1', 'val3_prop2');
private readonly _prop1: string;
private readonly _prop2: string;
private constructor(prop1: string, prop2: string){
this._prop1 = prop1;
this._prop2 = prop2;
}
get prop1(): string{
return this._prop1;
}
get prop2(): string{
return this._prop2;
}
}
答案 0 :(得分:0)
是否可以在TypeScript中实现接收Java中的参数?或者这真的只能通过课程来实现吗?
我不相信 但是有一些库可以用于此类事情:https://lmfinney.wordpress.com/2017/07/12/ts-enums-bringing-java-style-enums-to-typescript/
但它确实只是你正在做的更全面的版本。
答案 1 :(得分:0)
你可以强制使用如下any
强制转换的枚举类型。但我认为课堂解决方案更好。
class MyEnumType {
constructor(public val1: number, public val2: number) { }
}
enum MyEnum {
Enum1 = <any>new MyEnumType(1, 2),
Enum2 = <any>new MyEnumType(3, 4)
}
let enum1 = MyEnum.Enum1;
console.log(enum1 == MyEnum.Enum1); // true
console.log((<MyEnumType><any>enum1).val1); // 1