質問内容
Javascript で、配列の添字として使用できるように、整数型の列挙子を定義したいのですがどのように書けばいいのでしょうか?
Typescript では enum 構文があるようですが、Javascript には enum 構文がないです。
以下の C++ の列挙子のようにキャスト不要で整数型として認識される列挙子を定義したいです。
よろしくおねがいします。
探しているもの
- 定数 (あとから変更することはない)
- 整数の値を表し、配列の添字として使用できる
- -1 始まりの連続した整数 (-1, 0, 1, 2, ...)
- ある名前空間以下に定数を定義したい (C++ でいうと、ある名前空間の中に定義して Zero ではなく、Number::Zero として定数を参照する)
cpp
1#include <iostream> 2#include <vector> 3 4struct Number 5{ 6 enum Type 7 { 8 Null = -1, // -1 を表す定数 9 Zero, // 0 を表す定数 10 One, // 1 を表す定数 11 Two, // 2 を表す定数 12 }; 13}; 14 15int main() 16{ 17 std::vector<std::string> array = {"a", "b", "c"}; 18 19 // 整数型として認識される列挙子 20 std::cout << array[Number::Two] << std::endl; // c 21 std::cout << std::boolalpha << (Number::Two == 2) << std::endl; // true 22}
試したこと
調べたところ、Symbol を使ったサンプルが出てきたのですが、整数型とは認識されていないためか添字としては利用できないようでした。
js
1const Number = Object.freeze({ 2 Zero: Symbol(0), 3 One: Symbol(1), 4 Two: Symbol(2) 5}); 6 7let array = ["a", "b", "c"]; 8 9console.log(array[Number.Two]); // undefined
1つ1つ変数として定義していく方法も考えましたが、グローバル名前空間に定義されてしまうことと、50個ぐらい定数があり煩雑となるため、より簡潔な方法がありましたら教えて下さい。
const Zero = 0; const One = 1; const Two = 2;
環境
- ES 2019
回答2件
あなたの回答
tips
プレビュー