簡體   English   中英

如何在打字稿中投射所有成員?

[英]How to cast with all members in typescript?

我有一個Typescript類,例如:

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; 
    }

然后在其他班級,我嘗試轉換另一個班級:

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對象“失去”它的方法。 我如何轉換為CreatePerson保留所有方法?

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

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

如果是這種情況,那么您不能僅CreatePerson並獲取CreatePerson的實例。
因為打字稿使用結構化打字,所以以下工作:

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

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

與轉換相同,如果您擁有一個具有相同結構的對象,並將其轉換為CreatePerson您仍然不會獲得CreatePerson的實例。
您需要這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM