TypeScriptのパラメータとしてのEnum
2023-09-10 20:50:32
質問
パラメータの型をEnumに設定することはできないのでしょうか? このように。
private getRandomElementOfEnum(e : enum):string{
var length:number = Object.keys(e).length;
return e[Math.floor((Math.random() * length)+1)];
}
コンパイル時に以下のようなエラーが発生します。
引数式が期待されます。
と
any
を使えば、すべて解決です。
private getRandomElementOfEnum(e : any):string{
var length:number = Object.keys(e).length;
return e[Math.floor((Math.random() * length)+1)];
}
このコードはうまく動作します。しかし、エレガントでタイプセーフではありません。
パラメータとしてenumを定義する可能性やちょっとした回避策はないのでしょうか?
どのように解決するのですか?
TSの列挙型は共通の祖先やインターフェイスを継承しないため、パラメータが列挙型であることを確認することはできません。
TypeScriptは静的解析をもたらします。あなたのコードでは動的プログラミングで
Object.keys
と
e[dynamicKey]
. ダイナミックコードの場合、タイプ
any
という型が便利です。
あなたのコードはバグだらけです。
length()
が存在しない。
e[Math.floor((Math.random() * length)+1)]
は文字列か整数を返し
は列挙値を手動で設定することができます。
...
以下は提案です。
function getRandomElementOfEnum<E>(e: any): E {
var keys = Object.keys(e),
index = Math.floor(Math.random() * keys.length),
k = keys[index];
if (typeof e[k] === 'number')
return <any>e[k];
return <any>parseInt(k, 10);
}
function display(a: Color) {
console.log(a);
}
enum Color { Blue, Green };
display(getRandomElementOfEnum<Color>(Color));
理想的には、パラメータ型
any
で置き換える必要があります。
typeof E
に置き換えるべきですが、コンパイラ (TS 1.5) はこの構文を理解できません。
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] C#の[Flags]Enum属性の意味とは?
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
-
[解決済み] TypeScriptでenumのような型を作成する方法は?
-
[解決済み] TypeScriptでenumのバリアントはどのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 式は、算術式またはスコープされていない enum 型でなければなりません。
-
[解決済み] Typescript の enum スイッチが機能しない
-
[解決済み] Goでenumを表現する慣用的な方法は何ですか?
-
[解決済み] angular2 のビューテンプレートで enum を渡す
-
[解決済み] Dart enumの "値 "を取得する方法
-
[解決済み] TypeScriptでenumのような型を作成する方法は?
-
[解決済み] Enumに関数を追加する
-
[解決済み] Dartは列挙をサポートしていますか?
-
[解決済み] プログラムでenum型を列挙するには?
-
[解決済み] Kotilnでenumの "static "メソッドを作成するにはどうすればよいですか?