2017-12-20 1 views
3

가정하자 나는이 HTTP 요청에서 다음 개체 :더 나은 방법

{ 
    id: 'someid', 
    name: 'Jonh', 
    age: 23 
} 

새로운 창조에 더 나은 방법입니다 무엇 user.model.ts

export class User { 
    id: string, 
    name: string, 
    age?: number, 
} 

그 객체의 User? 우리는이 같은 constructor를 사용할 수 있습니다

\\user.model.ts 
... 
constructor(obj: Object) { 
    this.id = obj.id; 
    this.name = obj.name 
    this.age = obj.age 
} 

그리고 new User(object)를 호출합니다. 생성자 안에 모든 모델 속성 (this.prop = obj.prop)을 할당하지 않고받은 객체의 기능에서 그러한 모델을 인스턴스화하는 또 다른 방법이 있습니까?

+0

실제로 내가받은 개체를 모델로 구문 분석하고 http 요청 안에 반환 할 수 있다고 생각합니다. 나는 영웅들이 http 예제를 통해 정확하게 수행한다고 생각한다. –

+3

'return this.http.get (this.userUrl)'은 직접 cobstructor 호출없이 인스턴트 화 작업을 수행해야한다. –

+0

Benedikt Schmidt. 내가 RRForUI 대답에 대해 언급했듯이,이 방법은 부분적으로 작동합니다. 모델 멤버가 인터페이스로 작동하고, 인터페이스 멤버 만 필요하면 괜찮습니다. 그러나 모델에 메소드가 있다면, 들어오는 객체에는 사용할 수 없습니다. –

답변

0

RRForUI 응답 및 베네딕트 슈미트의 코멘트를 작동해야이 서비스

let userData={ 
    id: 'someid', 
    name: 'Jonh', 
    age: 23 
} 

에서 다음과 같이 그것을 얻을 말할 수 인터페이스로 행동하는 모델.

개체에 모델 속성이 상속되기를 원하면 (적어도 내 테스트에서는) 작동하지 않습니다. 모델이 isYoung 방법 즉이 :이 있다면

\\user.model.ts 
... 
export class User 
{ 
    public id:string; 
    public name:string 
    public age :number 

    public isYoung?() { 
    return this.age < 100 ? true : false; 
    } 
}, 

방법은 avaiable이다없는 반대하는 것입니다. 이것을 해결하기위한 방법은 Object.assign을 사용한다 :

user = Object.assign(new User, user), 

는 (서브로부터 들어오는 데이터) 방법 ìsYoung 사용자에게 제공한다.

3

당신은 그대로 할 수 있어야합니다.

\\user.model.ts 
... 
export class User 
{ 
    public id:string; 
    public name:string 
    public age :number 
} 

내가 원하는 경우이 문제를 해결 한 후

let user=new User(); 
user=userData; 

+0

답변 해 주셔서 감사합니다. RRForUI. 이 방법은 부분적으로 작동합니다. 인터페이스 역할을하는 모델을 인터페이스로 사용하려는 경우 모델 동작을 인터페이스로 사용합니다. 그러나 모델에 메소드가 있다면, 들어오는 객체에는 사용할 수 없습니다. –