web-dev-qa-db-ja.com

インスタンスからTypeScript列挙名を取得します

次のTypeScript enumがあります。

enum Country {
    BR = "Brazil",
    NO = "Norway"
}

次に、Countryを引数として受け取るメソッドがあるとします。

someFunc = (country: Country): void => {
    console.log(country) //Will print "Brazil" if country = Country.BR
    console.log(Country[country]) //Same as above
    console.log(???) //I want to print "BR" if country = Country.BR
}

3番目のconsole.logステートメントを解決するにはどうすればよいですか?

列挙型キーを取得するにはどうすればよいですか?

よろしく

9
Robin Jonsson

列挙型の解釈では、次のようになります

Country["BR"] = "Brazil";
Country["NO"] = "Norway";

これは単純なオブジェクトです。

デフォルトでは、列挙型のキーを取得できません。ただし、手動でキーを反復処理して、そのキーを見つけることができます。

enum Country {
    BR = "Brazil",
    NO = "Norway"
}

console.log(Object.keys(Country).find(key => Country[key] === country))
8
Suren Srapyan

ts-enum-utilgithubnpm )は、文字列列挙型の値->キーの逆ルックアップ、コンパイル時のタイプセーフティ、およびランタイム検証をサポートします。

import {$enum} from "ts-enum-util";

enum Country {
    BR = "Brazil",
    NO = "Norway"
}

someFunc = (country: Country): void => {
    // throws an error if the value of "country" at run time is
    // not "Brazil" or "Norway".  
    // type of "name": ("BR" | "NO")
    const name = $enum(Country).getKeyOrThrow(country);
}
0
Jeff Lau