2017-01-26 1 views
1

, например, если я создать новый тип объекта:В Typcript можно ли присвоить имя свойства объекта Javascript нескольким значениям?

interface NEWOBJECT { 
    name: {}; 
} 

бы это можно сделать так, что имя может быть либо name1 или name2, так что я могу создать NEWOBJECT с либо именами, что имя свойства для NEWOBJECT?
так:

var object1: NEWOBJECT = {name1: {}}; 
var object2: NEWOBJECT = {name2: {}}; 

спасибо

ответ

1

Если вы установите тип, он должен использовать свойства одинаковые имена. Но вы можете объявить необязательные свойства. И затем вы можете объявить свою переменную одним из них.

interface NEWOBJECT { 
    name1?: {}; 
    name2?: {}; 
} 
+0

Это не оптимальное решение, потому что оно также не требует. Объединение двух типов было бы лучше, хотя мой подход был более кратким. –

+0

На самом деле мой подход не избавляет вас от проблемы необязательности, так что ваш, как хороший, но я бы предпочел бы союз –

+0

спасибо за ответ, у меня есть однако это не позволяло принимать свойства или оба свойства при создании объекта. – icda

2

Да

type NEWOBJECT = { 
    [N in 'name1' | 'name2']?: {}; 
} 

К сожалению, это все еще позволяет оба свойства быть либо присутствует или отсутствует, так что я бы на самом деле следовать более точный подход с использованием uniun типов

interface NEWOBJECT1 { 
    name1: {}; 
} 

interface NEWOBJECT2 { 
    name2: {}; 
} 

type NEWOBJECT = NEWOBJECT1 | NEWOBJECT2; 

Убедитесь, что вы имеют самый последний TypeScript.

+0

Я проверяю ваш решение, но оно вызывает ошибку. См. Http://www.typescriptlang.org/play/index.html#src=interface%20NEWOBJECT%20%7B%0D%0A%20%20%5BN%20in%20'name1'%20%7C%20 ' name2 '% 5D% 20% 3A% 20% 7B% 7D% 3B% 0D% 0A% 7D –

+1

@SurenSrapyan: Любой контент в этой ссылке специфичен для вас. Предложите включить то, что вы пробовали, и результаты (сведения об ошибке) * в вопросе *. – Richard

+0

@Richard Отредактировано спасибо –

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