Angular 2:如何在反序列化时保留类方法?

use*_*057 2 json typescript angular

假设我有一节课Foo:

export class Foo {
    name: string;

    printName(): void {
        console.log(this.name);
    } 
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,当我从后端FooService获取一个FooJSON并从中创建一个Foo对象时,它没有,printName()因为JSON对象中没有这样的东西.

我应该如何安排这个(在Angular 2的背景下)?我是否必须在课外创建我的方法,以便他们只是Foo作为一个参数?

例如,在Java中,DTO的方法完全没问题.

tos*_*skv 7

通常,您只使用http而非类实例传输具有值的对象.您必须自己创建类实例.

export class Foo {

    constructor(name: string) {}
    printName(): void {
        console.log(this.name);
    } 
}


// data deserialized by angular from the request
let data = { name: 'John' };

let foo: Foo = new Foo(data.name);
Run Code Online (Sandbox Code Playgroud)

如果它有帮助,您可以为从服务器接收的数据创建接口,并将其传递给Foo类的构造函数.

注意:请记住,TS中没有类型转换.如果你正在做类似的事情

let foo: Foo = <Foo> data;
Run Code Online (Sandbox Code Playgroud)

这是一个类型断言,您只需告诉编译器数据类型为Foo,它不会对数据对象执行任何操作.