TypeScript 列挙型をマップするにはどうすればよいでしょうか? たとえば、文字列の場合は次のようにします。
let arr = [ 'Hello', 'Goodbye' ];
arr.map(v => {
if (v === 'Hello') {
return ':)';
} else if (v === 'Goodbye') {
return ':(';
}
); // [ ':)', ':(' ]
もちろん、これは列挙型では機能しません。
enum MyEnum { Hello, Goodbye };
MyEnum.map(v => {
if (v === MyEnum.Hello) {
return ':)';
} else if (v === MyEnum.Goodbye) {
return ':(';
}
}); // does not work
理想的には、これを一般化された方法で実行して、持っている列挙型を単純にマップ関数に渡すことができるようにしたい。型情報を保持しながら使用法は次のようになります。
map(MyEnum, v => {
if (v === MyEnum.Hello) {
return ':)';
} else if (v === MyEnum.Goodbye) {
return ':(';
}
}); // [ ':)', ':(' ]
私は、これを自動的に実行する関数を取得しようと試みていますが、ジェネリックを正しく取得するのに問題が続いています。
ベストアンサー1
enum をマップするには、次のようにします。
(Object.keys(MyEnum) as Array<keyof typeof MyEnum>).map((key) => {})