2015-11-17 3 views
3

Я изучаю некоторые машинописи с нуля. Вот какой код с официального сайта. Я смущен одной строкой внизу. Что означает это заявление? {} после символа равенства означает, что тип возврата недействителен?Что означает эта строка машинописного текста?

var validators: { [s: string]: Validation.StringValidator; } = {}; 

/////////////////////////////////////////// //////////////////////////////////////////////

module Validation { 
    export interface StringValidator { 
     isAcceptable(s: string): boolean; 
    } 

    var lettersRegexp = /^[A-Za-z]+$/; 
    var numberRegexp = /^[0-9]+$/; 

    export class LettersOnlyValidator implements StringValidator { 
     isAcceptable(s: string) { 
      return lettersRegexp.test(s); 
     } 
    } 

    export class ZipCodeValidator implements StringValidator { 
     isAcceptable(s: string) { 
      return s.length === 5 && numberRegexp.test(s); 
     } 
    } 
} 

// Some samples to try 
var strings = ['Hello', '98052', '101']; 
// Validators to use 
var validators: { [s: string]: Validation.StringValidator; } = {}; 
validators['ZIP code'] = new Validation.ZipCodeValidator(); 
validators['Letters only'] = new Validation.LettersOnlyValidator(); 
// Show whether each string passed each validator 
strings.forEach(s => { 
    for (var name in validators) { 
     console.log('"' + s + '" ' + (validators[name].isAcceptable(s) ? ' matches ' : ' does not match ') + name); 
    } 
}); 

ответ

3

Эта линия ...

var validators: { [s: string]: Validation.StringValidator; } = {}; 

разбивается как:

  • var validators - объявить переменную
  • { [s: string]: Validation.StringValidator; } это тип информации. Тип этой переменной - хэш. Здесь представлены { [type of key]: type of value }. Итак, это хэш строк до Validation.StringValidator.
  • = {} Это начальное значение переменной: пустой хэш.

Если бы я хотел сделать хэш чисел в строки, я хотел бы использовать

var myHash: { [key: number]: string } = {}; 
+0

Спасибо! Я понимаю первый и третий пункты. Во втором пункте вы упомянули хэш; могу ли я сказать, что он объявляет что-то вроде словаря со строкой в ​​качестве ключа? Поправьте меня если я ошибаюсь. – catlovespurple

+0

Да. Это словарь со строковым ключом и значением типа 'Validation.StringValidator'. – meagar

+0

Отлично! Спасибо за подтверждение! Я дам вам кредит !!! – catlovespurple

-2

Я не знаю, машинописи, но я знаю, ECMAScript, из которых машинопись является надстройкой, и в ECMAScript, фигурные скобки обозначают литерал объекта, поэтому, это присваивает пустой объект с переменной validators.

В следующих двух строках пустой объект заполняется некоторыми сопоставлениями клавиш.

+0

да фигурные скобки создать пустой объект. Получите шанс узнать эту часть? - [s: string]: Validation.StringValidator? Я чувствую, что он передал строковый объект в качестве параметра в StringValidator ctor. – catlovespurple