2016-10-21 4 views
4

У меня есть постоянный:динамически добавлять имя свойства в интерфейс машинописи

const name = 'some/property'; 

я хотел бы, чтобы определить интерфейс, который использует имя в качестве ключа для свойства сходным образом с использованием его в объект декларации следующим образом:

{[name]: 'Bob'} 

Я попытался следующие, но это, кажется, что это делает что-то другое:

interface MyInterface { 
    [name]: string; 
} 

динамически определяет имена свойств, поддерживаемые в машинописном тексте?

ответ

3

Вы должны указать тип name. Невозможно использовать его в объявлении объекта, но вы можете использовать [] для установки и доступа к значению свойства.

interface MyInterface { 
    [name: string]: string; 
} 
const n = 'qweq'; 

let x: MyInterface = { 
    'a': 'b' 
} 

x[n] = 'a'; 

И доступ к нему таким образом.

x[n] 

Посмотрите на площадку here.

+0

Это не работает (или, может быть, мой вопрос неясен). В вашем примере 'x.coolname'' undefined'. –

+0

Вы правы, что создавали свойство с именем n на объекте X. Я обновил свой ответ. :) – toskv

+0

Спасибо, но это полностью исключает проверку меток, это не приведет к тому, что объект типа 'MyInterface' будет иметь свойство' qweg' –

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