2015-08-13 3 views
2

В TypeScript можно указать допустимые значения в объекте? Например. указать, что все ключи должны иметь номера:машинописный синтаксис - задание типов значений объектов

{ 
    'id': 1, 
    'attr1': 124, 
    'attr2': 4356, 
    ... 
} 

?

Я искал через http://www.typescriptlang.org/Handbook и обнаружил, что я могу использовать Array, набрав (оба ключа и значения), как это:

interface StringArray { 
    [index: number]: string; 
} 

, но на самом деле, карта (JS Object) и массив не то же, концептуально (в JavaScript он ведет себя аналогично, но в TypeScript он должен рассматриваться отдельно из-за сильной типизации).

ответ

7

Можно ли указать допустимые значения в объекте? Например. указать, что все ключи должны иметь номера

Да, это возможно.

В обоих JavaScript & машинописи (который является надстройкой из JS), вы можете получить доступ к свойствам через obj.prop или obj['prop'], который является тем, что позволяет ниже синтаксис для работы.

// This defines an interface that only allows values to be numbers 
interface INumbersOnly { 
    [key: string]: number; 
} 

// when using it, it will check that all properties are numbers 
var x: INumbersOnly = { 
    num: 1, // works fine 
    str: 'x' // will give a type error 
}; 

Above example in TS Playground