2015-12-17 34 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"; 

前两个记录机工作正常,但我得到一个'不能设置属性'地址1''未定义'。

如果我可以从Details中设置age属性,那么为什么我不能设置Address的address1属性,我该如何解决它?

回答

1

因为你写道:

address?: Address}; 

但对于代码是有效的,它应该是:

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

您需要分配一个值来解决,就像你在details: Details = {};一样,或者它将是未定义的。要这样做,细节需要被定义为一个类,而不是一个接口。写入: Address不会实例化一个新的类,它只指定类型。或者,你可以地址1和2可选像你这样的地址,使用?,然后只写address?: Address = {};

如果你不想详细定义为一类,你可以写details: Details = {address:{}};下父母。

+0

我已经使address1和address2成为可选项,但是对该行不满意: address ?: Address = {}; – superman1971

+0

完美,就是这样。我不想让它成为一堂课。 – superman1971