在Typescript代码中是否需要构造函数?

Ani*_*esh 1 javascript typescript aurelia visual-studio-code

我生成使用新Aurelia大街项目aurelia-cliau new命令.

这是app.ts给我的:

export class App {
  message = 'Hello World!';
}
Run Code Online (Sandbox Code Playgroud)

app.tsapp.ts这个教程更新了我的内容,如下所示:

export class App {
  constructor() {
    this.message = 'Hello World!';
    this.firstName = "Animesh";
    this.lastName = "Bulusu";
  }

  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}
Run Code Online (Sandbox Code Playgroud)

我刷新页面时可以看到预期的输出,但是我在错误控制台中看到了这些错误.

"App"类型中不存在"消息"属性.
类型'App'上不存在属性'lastName'.
类型'App'上不存在属性'lastName'.

如果我删除构造函数并将变量直接放在类中,这些错误就会消失.为什么这样,我如何摆脱这些错误?

Nit*_*mer 7

您需要声明成员:

class App {
    private message: string;
    private firstName: string;
    private lastName: string;

    constructor() {
        this.message = 'Hello World!';
        this.firstName = "Animesh";
        this.lastName = "Bulusu";
    }
 }
Run Code Online (Sandbox Code Playgroud)

然后错误就会消失.


编辑

如果您的初始成员值是常量,并且在创建新实例时不需要初始化任何内容,那么就不需要构造函数:

class App {
    private message = 'Hello World!';
    private firstName = "Animesh";
    private lastName = "Bulusu";
}
Run Code Online (Sandbox Code Playgroud)

(注意,这里也没有必要指定成员的类型,因为编译器可以推断它们是字符串)

此外,如果您希望为成员分配传递给构造函数的值,那么您也可以使用快捷方式(我非常确定它来自C#):

class App {
    constructor(private message: string, public name: string) {}
}
Run Code Online (Sandbox Code Playgroud)