是否可以在TypeScript中实现接收类似Java中的参数的Enums?

时间:2017-07-17 00:13:51

标签: typescript enums

我是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;
    }
}

2 个答案:

答案 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