打字稿类中的方法给出错误"不是函数"

eri*_*ola 30 typescript angular

我在Angular2 Web应用程序上工作.我在typescript中创建了一个简单的类:

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

    nominative() : string {
        return this.lastName + " " + this.firstName;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我调用nominative类型UserI的对象时收到此错误: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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以这种方式使用lambda表达式:

nominative = () : string => { ... }
Run Code Online (Sandbox Code Playgroud)

但没有任何改变.问题只出在这堂课上,所以我做错了什么?

Gün*_*uer 26

as User只告诉编译器可以安全地假设值是类型User,但对运行时没有任何影响,并且它没有任何方法,因为方法不与JSON一起传递.

你需要

let user = new User(JSON.parse(sessionStorage.getItem("User")));
Run Code Online (Sandbox Code Playgroud)

获得一个实际的User实例.您需要创建一个构造函数,将JSON中的值分配给字段

class User {
  ...
  constructor(json:any) {
    this.firstName = json.firstName;
    this.lastName = json.lastName;
  }
Run Code Online (Sandbox Code Playgroud)

  • 另一个选择是`Object.assign(new User(),JSON.parse(sessionStorage.getItem("User")))` (20认同)
  • 当这样的事情存在时,Typescript 就太糟糕了……为什么我们还要再次使用这种语言? (3认同)