Typescript 将普通对象转换为类?

Typescript 将普通对象转换为类?,typescript,Typescript,我正在用TypeScript建立一些最佳实践。如果我发出一个web请求,得到一个JSON对象,其属性为Name和Age,有没有一种简单的方法可以将其转换为我的类,该类具有属性Name和Age,还有一个函数,比如PrintPerson 我知道我可以编写一个构造函数,将对象和字段逐个复制到中,这样类就有了相同的数据。下面是一个简单的例子: interface RawPerson { Name: string; Age: number; } class Person implemen

我正在用TypeScript建立一些最佳实践。如果我发出一个web请求,得到一个JSON对象,其属性为
Name
Age
,有没有一种简单的方法可以将其转换为我的类,该类具有属性
Name
Age
,还有一个函数,比如
PrintPerson

我知道我可以编写一个构造函数,将对象和字段逐个复制到
中,这样类就有了相同的数据。下面是一个简单的例子:

interface RawPerson {
    Name: string;
    Age: number;
}

class Person implements RawPerson {
    Name: string;
    Age: number;

  constructor(obj: RawPerson) {
      this.Name = obj.Name;
      this.Age = obj.Age;
  }

  PrintPerson() {
      console.log(this.Name + ' is ' + this.Age);
  }
}

var json = { Name: 'Corey', Age: 26 };
// What works
new Person(json).PrintPerson();
// Something simple I'd like to do (but doesn't work)
// If this worked, I wouldn't need the Person constructor
(<Person>json).PrintPerson();
interface-RawPerson{
名称:字符串;
年龄:人数;
}
类Person实现RawPerson{
名称:字符串;
年龄:人数;
建造师(对象:人){
this.Name=obj.Name;
这个年龄=对象年龄;
}
印刷人(){
console.log(this.Name+'是'+this.Age);
}
}
var json={Name:'Corey',年龄:26};
//什么有效
newperson(json.PrintPerson();
//我想做一些简单的事情(但不起作用)
//如果这行得通,我就不需要这个人了
(json.PrintPerson();

在每个字段上都有一个构造函数副本可能会变得单调乏味。我想做一些简单的事情,比如cast it,只希望这些函数现在神奇地出现了。他们不是。是否有其他方法可以避免我编写这个笨重的构造函数?

使用它怎么样


难道你不应该投下它吗?IE:
ajaxCall.then((data:Person)=>{//data现在是Person类型
@tymeJV我正在使用Angular 2,所以从
http.get
得到的是
响应
对象。如果我有
res:Response
,那么我可以调用
res.json()
,将其作为普通对象。如果我将其转换为
Person
,那么(就像我上面的例子一样),我得到一个错误,说
PrintPerson
不存在。这看起来像是试图
res.json()
仍然只将对象视为对象而不是人。没有发生转换,因此为什么
PrintPerson
不在其上,它仍然是一个对象。
interface Object {    
    assign(target: any, ...sources: any[]): any;
}

interface RawPerson {
    Name: string;
    Age: number;
}

class Person implements RawPerson {
    Name: string;
    Age: number;

  constructor(obj: RawPerson) {
      Object.assign(this, obj);
  }

  PrintPerson() {
      console.log(this.Name + ' is ' + this.Age);
  }
}

var json = { Name: 'Corey', Age: 26 };
new Person(json).PrintPerson(); // prints: "Corey is 26"