我可以让 Enum 引用文本字符串吗?

Sam*_*tar 1 typescript

我知道我可以有一个这样的枚举:

enum TShirtSize {
  Small = 3,
  Medium = 5,
  Large = 8
}

var mySize = TShirtSize.Large;
Run Code Online (Sandbox Code Playgroud)

但是有什么方法可以指定文本字符串而不是数字 3,5 和 8 吗?

bas*_*rat 7

您可以创建一个可用于纯粹基于字符串的枚举的类。演示:

class Enum {
    constructor(private value: string) { }
    /** For equality == with string */
    toString() {return this.value }
    /** For send to server serialization */
    toJSON() {return this.value }
}

class Foo extends Enum {    
    static First = new Foo('First')
}

// From server to browser
var recievedDTO: { something: Foo } = <any>{
    something: 'First'
}
console.log(recievedDTO.something == Foo.First); // true

// To server 
var sendDTO = {
    something: Foo.First,
}
console.log(JSON.stringify(sendDTO) == '{"something":"First"}'); // true

// Warning: don't use `===`
console.log(recievedDTO.something === Foo.First); // false 
Run Code Online (Sandbox Code Playgroud)