インターフェースではなく、リテラルに対して `keyof` 演算子を使用することは可能でしょうか?
2023-08-14 15:17:35
質問
次のようなオブジェクト・リテラルがあります(すべてのプロパティはコンパイル時に分かっています)。
const foo = {
"hello": "hola"
};
もし
foo
が変数ではなくインターフェースであった場合、以下のようなことが簡単にできるようになります。
/** THEORETICAL ONLY - Does not compile! */
function translate(input: keyof foo): string {
return foo[input];
}
しかし、変数でこれを行なうとうまくいきません。なぜならコンパイラは
foo
.
Typescript は
keyof
の操作をサポートしていますか?
どのように解決するのですか?
keyof
は型に対して操作しますが
foo
は値である。しかし
typeof
演算子は値を受け取り、その型を生成するので
keyof typeof foo
を使って行います。
これは、オブジェクトリテラルにインターフェースを関連付けていない場合にのみ動作することに注意してください(ありがとうございます ラジカセ ).
関連
-
[解決済み] タイプスクリプトのパイプ(|)の意味とは?
-
[解決済み] TypeScript "this" scoping issue when called in jquery callback.
-
[解決済み] ngForとAsync Pipe Angular 2でObservableオブジェクトから配列を利用する。
-
[解決済み] spec/testフォルダを使用したtsconfigのセットアップ
-
[解決済み] Angular 2で相対パスが非常に長いインポートを回避する方法とは?
-
[解決済み] Angular2 canActivate() 非同期関数呼び出し
-
[解決済み] ...は非モジュールのエンティティに解決され、このコンストラクトを使用してインポートすることはできません」とはどういう意味ですか?
-
[解決済み] Angular2でのenumに基づく選択
-
[解決済み] オプションのパラメータが提供されたかどうかを確認するにはどうすればよいですか?
-
[解決済み] npmスクリプトを使用して、tsc -watch && nodemon --watchを実行する方法はありますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Typescriptでインターフェースやクラスを使用する場合 [重複].
-
[解決済み] Angular 2でアプリ起動時にサービスを実行する方法
-
[解決済み] モジュールと名前空間 - Import vs Require Typescript
-
[解決済み] TypeScript "this" scoping issue when called in jquery callback.
-
[解決済み] TypeScriptで強く型付けされた配列の作成
-
[解決済み] Angular 2で相対パスが非常に長いインポートを回避する方法とは?
-
[解決済み] typescript の module.exports
-
[解決済み] types/packageでインストールしたTypeScriptの型定義が正しくない場合に上書きする方法
-
[解決済み] Angular2 - Http POST リクエストパラメータ
-
[解決済み] TypeScriptでクラスを角括弧「<>」で囲むとはどういう意味ですか?