2017-03-20 1 views
4

저는 Angular2 웹 응용 프로그램에서 작업합니다. 나는이 오류가 나타납니다 유형 User의 목적에 nominative를 호출 할 때typescript 클래스의 메서드에서 "함수가 아닙니다"오류가 발생했습니다.

export class User { 
    firstName: string; 
    lastName: string; 

    nominative() : string { 
     return this.lastName + " " + this.firstName; 
    } 
} 

: Error in :0:0 caused by: user.nominative is not a function을 나는 타이프에서 간단한 클래스를 만들었습니다.

나는 나의 AppComponent 클래스의 함수를 호출 :

export class AppComponent implements OnInit { 
    name: string = ""; 

    ngOnInit() : void { 
     let user = JSON.parse(sessionStorage.getItem("User")) as User; 
     if (user) { 
      this.name = user.nominative(); 
     } 
    } 
} 

는 이미이 방법으로 람다 식을 사용하려고 :

nominative =() : string => { ... } 

그러나 아무것도 변화. 문제는이 수업에서만 발생합니다. 그래서 내가 뭘 잘못하고있는 걸까요?

+0

과 같은 필드에 할당하는 생성자를 만들어야합니다. 'user'를 얻는 방법을 코드로 공유하십시오. 나는 실수가 거기에 있다는 것을 확신한다. –

+0

내 질문을 편집했습니다. 사용자 객체는'user.FirstName'을 수행하면 제대로 작동하기 때문에 ok로 보입니다. – erikscandola

답변

9

as User은 값이 User 유형이라고 가정하는 것이 안전하지만 런타임에 영향을주지 않으며 메서드가 JSON과 함께 전달되지 않으므로 메서드가 없음을 컴파일러에게 알립니다.

당신은 실제 User 인스턴스를 얻을 수

let user = new User(JSON.parse(sessionStorage.getItem("User"))); 

가 필요합니다. JSON의 값을

class User { 
    ... 
    constructor(json:any) { 
    this.firstName = json.firstName; 
    this.lastName = json.lastName; 
    } 
+5

또 다른 옵션은'Object.assign (new User(), JSON.parse (sessionStorage.getItem ("User")))' –

+0

좋은 답변입니다! 이제는 모두 잘 작동합니다! 고맙습니다! – erikscandola

관련 문제