2017-04-13 5 views
0

typescriptですハンドブックは、以下の例があります:あなたはどのように構文の動作の詳細について詳しく説明することができればは聞かせてバリデータですStringValidator。 } = {};と同じ ...?

let validators = {}; 
validators["s"] = new StringValidator(); 

// Validators to use 
let validators: { [s: string]: StringValidator; } = {}; 
validators["ZIP code"] = new ZipCodeValidator(); 

がやっている:として

let validators: { [s: string]: StringValidator; } = {}; 

同じそれは素晴らしいだろう。

答えて

1

やっている:

let validators = {}; 
validators["s"] = new StringValidator(); 

いいえ、let validators: { [s: string]: StringValidator; } = {};let validators = {};異なっている:として

let validators: { [s: string]: StringValidator; } = {}; 

同じ。

let validators: { [s: string]: StringValidator; } = {}; 

が何をしているか


はタイプの識別子を宣言しています。上のコードで言っていることは次のとおりです: "私は識別子validatorsを宣言しています。このオブジェクトの型はオブジェクトのキーとしてstring,sを持つことができます(javascriptオブジェクトは単にキーと値のペアです)。すべてのキーの値はStringValidatorとなります。

型の注釈(:の右側にあるもの)を削除すると、オブジェクトがある場合はではなくとなります。

vsコードの宣言を強調表示すると、その違いがわかります。タイプの注釈を追加するとタイプ{ [s: string]: StringValidator; }が表示されますが、それを削除するとanyとなり、オブジェクトは「任意のタイプ」になります。

1

いいえ、彼らは同じではありませんね。

最初の

let validators: { [s: string]: StringValidator; } = {}; 

は、そのタイプ{ [s: string]: StringValidator; }と値{}あるvalidatorsという名前の変数を宣言する。このタイプはvalidatorsStringValidatorのインスタンスを生成するキー(文字列)によってインデックス付けすることができることを意味します。 sは、その実際の名前なしのランタイム効果がありません「ダミー」変数であることに注意してください。この名前は、インデクサの意味を文書化するためだけに使用されます。

StringValidatorオブジェクトはインスタンス化されません。 validatorsの最終値は、空のオブジェクトです。

第1

let validators = {}; 
validators["s"] = new StringValidator(); 

最初の型が{}(無特性を有するオブジェクト)であると推測し、その値{}であるvalidatorsという名前の変数を宣言する。次に、StringValidatorオブジェクトをインスタンス化し、結果をsプロパティvalidatorsに割り当てます。

validatorsという最終値は、オブジェクトを参照するsというプロパティを持つオブジェクトです。

関連する問題