1. ホーム
  2. typescript

インターフェースではなく、リテラルに対して `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 を使って行います。

これは、オブジェクトリテラルにインターフェースを関連付けていない場合にのみ動作することに注意してください(ありがとうございます ラジカセ ).