2017-04-24 34 views
0

我有一個打字稿類,如:後如何投入打字稿中的所有成員?

var person = new CreatePerson(); 
var otherObject // this object contains the 'name' and 'surname' properties;  

this.person = <CreatePerson> otherObject; 

this.person.name //works as expected 
this.person.surname // works as expected 
this.person.toJS() // error saying that is not a function here 

person對象「失去」的方法:

export class CreatePerson { 
    name: string; 
    surname: string; 
    constructor(data?: any) { 
     if (data !== undefined) { 
      this.name = data["name"] !== undefined ? data["name"] : null; 
      this.surname = data["surname"] !== undefined ? data["surname"] : null; 
     } 
    } 

    static fromJS(data: any): CreatePerson { 
     return new CreatePerson(data); 
    } 

    toJS(data?: any) { 
     data = data === undefined ? {} : data; 
     data["name"] = this.name !== undefined ? this.name : null; 
     data["surname"] = this.surname!== undefined ? this.surname: null; 
     return data; 
    } 

在其它類的我嘗試投其他類。我怎樣才能保留所有的方法CreatePerson

回答

2

如果我的猜測是正確的,那麼otherObject是這樣的:

{ 
    name: "name", 
    surname: "surname" 
} 

如果是這樣的話可以不只是施放此並獲得CreatePerson實例的情況。
因爲打字稿使用structural typing那麼以下工作:

let p1: CreatePerson = new CreatePerson(); 
let p2: CreatePerson = { 
    name: "name", 
    surname: "surname" 
} 

p2不是CreatePerson一個實例,它只是共享相同的結構,但是這些方法缺少。

與鑄造相同的東西,如果你有一個對象具有相同的strucutre,你把它投到CreatePerson你仍然不會得到CreatePerson的實例。
您需要執行此操作:

var otherObject = { ... } 
var person = new CreatePerson(otherObject);