2017-01-28 12 views
0

私はこの機能を持っている:Typesrcriptタイピング{[キー:文字列]:任意}

validate(formGroup: FormGroup): {[key: string]: any} 

及びI缶

return {validateLocation: false} 

又は

return {'validateLocation': false} 

key:stringなぜ、'validateLocation': falseことshoud両方ともすべて動作していますか? validateLocationは文字列ではありません。

答えて

2

TypeScriptはJavaScriptのスーパーセットです。つまり、JavaScriptとのある程度の互換性を維持する必要があります。キーアクセスが'validateLocation'または"validateLocation"の形式であることを期待するのが原則ですが、互換性のためにvalidateLocationの構文もサポートする必要があります。これにより、次の結果が得られます。

let validateLocation: string = 'a'; 

let value1 = {validateLocation: false} //Key will be "validateLocation" 
let value2 = {'validateLocation': false} //Key will be "validateLocation" 
let value3 = {"validateLocation": false} //Key will be "validateLocation" 
let value4 = {[validateLocation]: false} //Key will be "a" 
+0

ありがとうございました。この互換性により、Typescriptはあまり望ましい言語になりません。 TypescriptはJavaScriptと互換性があり、引き続きJavaScriptに変換する必要があります。画像はCとILとの互換性が必要ですが、まだILにコンパイルする必要があります。 –

+0

@ TonyBao:「エラー時にコンパイル」をオフにしてオンにすると、より厳密な型チェックの互換性のレベルを下げることができます'tsconfig.json'に" no implicit any "があります。 JSとの互換性は、JSプロジェクトを移行するときには薄いです。そしてJSからの移行が容易になります。 – Sefe

+0

ありがとうございました。その後、私たちは "制限"モードの古い道に行きます。 –

1

JavaScriptオブジェクトのキーは、常に文字列です。構文では指定する必要はありませんが、どちらの場合でもvalidateLocationは文字列キーになります。あなたがでこれを見ることができます

var x = { a: 1 }; 
console.log(x['a']); // Prints 1, because 'a' the string is a valid key. 

MDNは、より多くの詳細を持っている:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Object_literals

オブジェクトのプロパティ名には、空の文字列を含む任意の文字列を使用できます。プロパティ名が有効なJavaScript識別子または番号でない場合は、引用符で囲む必要があります。有効な識別子ではないプロパティ名も、ドット(。)プロパティとしてアクセスすることはできませんが、配列のような表記法( "[]")でアクセスして設定できます。

+0

ありがとうございます。しかし、私のコードはTypescriptコードです。私はTypescriptが両方の作業上の問題を取り除くためにTyping JavaScriptであると思っていました。これらの緩い構文でTyping言語を見つけるのに驚いた。 –

+0

まだ本当です。 TypeScriptは型の追加などを行いますが、結果として得られるコードは一度実行するとJavaScriptになります(最終的にはキーが文字列になります)。TypeScript型は現実を反映して効果的に動作するため、文字列として扱わなければなりません。オブジェクトを定義するときに文字列構文を許可するだけで、これを行うことができました。そうすれば、このことが明確になります。彼らはそこでJSの一貫性の側面にとどまることを選択しました - それは必要ではなく選択です。 –

関連する問題