2017-01-30 12 views
13

私は、次の(すべてのプロパティは、コンパイル時に知られている)などのオブジェクトリテラルを持っている:`keyof`演算子をインターフェイスの代わりにリテラルに使用できますか?

const foo = { 
    "hello": "hola" 
}; 

fooはインタフェースではなく、変数だったら、私は簡単に

/** THEORETICAL ONLY - Does not compile! */ 
function translate(input: keyof foo): string { 
    return foo[input]; 
} 
ような何かを行うことができます

しかし、コンパイラがfooという名前のインタフェースを見つけることができないため、変数を使用すると機能しません。

Typescriptは、コンパイル時に値がわかっているオブジェクトリテラルに対する操作keyofをサポートしていますか?

答えて

29

keyofはタイプで動作しますが、fooは値です。しかし、typeof演算子は値を取り、その型を生成するため、keyof typeof fooを使用してこれを行うことができます。

+4

あなたは世界で最もスマートな人ですか? – rhyek

+0

これはコンパイルしますが、実際に渡す文字列には何のフィードバックも与えません。私はそこに欲しいものを置くことができ、それは不平を言うことはありません。 – Clint

+0

これは魔法です。ありがとう! –

関連する問題