次の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
ステートメントを解決するにはどうすればよいですか?
列挙型キーを取得するにはどうすればよいですか?
よろしく
列挙型の解釈では、次のようになります
Country["BR"] = "Brazil";
Country["NO"] = "Norway";
これは単純なオブジェクトです。
デフォルトでは、列挙型のキーを取得できません。ただし、手動でキーを反復処理して、そのキーを見つけることができます。
enum Country {
BR = "Brazil",
NO = "Norway"
}
console.log(Object.keys(Country).find(key => Country[key] === country))
ts-enum-util
( github 、 npm )は、文字列列挙型の値->キーの逆ルックアップ、コンパイル時のタイプセーフティ、およびランタイム検証をサポートします。
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);
}