2016-04-13 5 views
0

Я работаю над JSON-Schema-faker project, где мы используем следующие машинопись интерфейса:нестандартные поля машинопись интерфейс/класс

interface IGeneratorSchema { faker?: any; chance?: any; } для таких объектов, как: { "faker": "name.findName" } или: { "chance": { "bool": { "likelihood": 100 } } }

Теперь нам нужно ввести поддержку для полей x-faker и x-chance, которые семантически означали бы такие же, как faker и chance, например:

{ "x-faker": "name.findName" } или: { "x-chance": { "bool": { "likelihood": 100 } } }

Я знаю, что могу создать ни x-faker, ни x-chance поле в интерфейсе машинопись. Вопрос в том, как я могу это преодолеть? Я хочу, чтобы TypeScript строго разрешал только эти четыре поля: faker, chance, x-faker, x-chance.

+0

Поддерживается ?? - https://github.com/Microsoft/TypeScript/issues/4653 – Amit

ответ

1

Я хочу машинопись строго разрешить только эти четыре поля: обманщик, шанс, х-фальсификатор, рентгеновское шанс

Вы можете объявить строковые свойства:

interface IGeneratorSchema { 
    faker?: any; 
    chance?: any; 
    "x-faker"?: any; 
    "x-chance"?: any; 
} 

const foo:IGeneratorSchema = { "x-faker": {} } // Okay 
const bar:IGeneratorSchema = { bad: {} } // Error: unknown property 

РИСКОВАННАЯ

Дополнительный элемент предотвращается только в сценариях с буквами свежих объектов: https://basarat.gitbooks.io/typescript/content/docs/types/freshness.html

Смежные вопросы