1. ホーム
  2. タイプスクリプト

[解決済み】文字列の値を持つenumの作成

2022-03-26 14:56:27

質問

以下のコードで enum をTypeScriptで作成します。

enum e {
    hello = 1,
    world = 2
};

そして、その値には、以下のようにアクセスすることができます。

e.hello;
e.world;

を作成するにはどうすればよいのでしょうか? enum を文字列値で指定できますか?

enum e {
    hello = "hello", // error: cannot convert string to e
    world = "world"  // error 
};

解決方法は?

TypeScript 2.4

文字列列の列挙が可能になったので、あなたのコードがそのまま動くようになりました。

enum E {
    hello = "hello",
    world = "world"
};

????

TypeScript 1.8

TypeScript 1.8以降では、文字列リテラル型を使用して、名前付きの文字列値に対して信頼性と安全性を提供することができる(これは部分的にenumが使用されている目的である)。

type Options = "hello" | "world";
var foo: Options;
foo = "hello"; // Okay 
foo = "asdf"; // Error!

もっと見る : https://www.typescriptlang.org/docs/handbook/advanced-types.html#string-literal-types

レガシーサポート

TypeScriptのEnumは数値ベースです。

静的メンバを持つクラスを使用することはできますが。

class E
{
    static hello = "hello";
    static world = "world"; 
}

無地でもいいんじゃない?

var E = {
    hello: "hello",
    world: "world"
}

更新しました。 という要件に基づいて、以下のようなことができるようになりました。 var test:E = E.hello; は、これを満たすものです。

class E
{
    // boilerplate 
    constructor(public value:string){    
    }

    toString(){
        return this.value;
    }

    // values 
    static hello = new E("hello");
    static world = new E("world");
}

// Sample usage: 
var first:E = E.hello;
var second:E = E.world;
var third:E = E.hello;

console.log("First value is: "+ first);
console.log(first===third);