2015-12-17 2 views
0

У меня есть следующий код машинописи: -классов машинописи и интерфейсы

export class Parent { 
    name: string; 
    details: Details = {}; 
} 

export interface Details { 
    age?: number; 
    address?: Address}; 
} 

export interface Address { 
    address1: string; 
    address2: string; 
} 

Тогда я могу ссылаться на этот код, чтобы установить некоторые значения: -

var myOptions = new HSCIC.Visualisation.Services.Parent(); 

myOptions.name = "Chris"; 
myOptions.details.age = 25; 
myOptions.details.address.address1 = "10 The Lane"; 

Первых два сеттер работают нормально, но я получить 'Невозможно установить свойство' address1 'из' undefined '.

Если я могу установить свойство age из Details, то почему я не могу установить свойство address1 Address и как его исправить?

ответ

1

Поскольку Вы писали:

address?: Address}; 

Но код, чтобы быть действительным, он должен быть:

address?: Address = {address1: null, address2: null}; 

Вам необходимо присвоить значение для решения, так же, как вы делали в details: Details = {};, или он будет неопределенным. Чтобы сделать это таким образом, детали необходимо определить как класс, а не интерфейс. Запись : Address не создает экземпляр нового класса, он задает только тип. Кроме того, вы можете сделать address1 и 2 по желанию, как вы сделали адрес, используя ?, а затем просто написать address?: Address = {};

Если вы не хотите, чтобы определить детали, как класс, вы могли бы написать details: Details = {address:{}}; под Parent.

+0

Я сделал адрес1 и адрес2 по желанию, но он недоволен линией: Адрес ?: Адрес = {}; – superman1971

+0

Отлично, вот и все. Я не хотел, чтобы это класс. – superman1971

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