【问题标题】:Is having constructor necessary in Typescript code?在 Typescript 代码中是否需要构造函数?
【发布时间】:2016-12-02 16:01:02
【问题描述】:

我使用aurelia-cliau new 命令生成了一个新的Aurelia 项目。

这是给我的app.ts

export class App {
  message = 'Hello World!';
}

我用 app.ts 从这个 tutorial 更新了我的 app.ts,如下所示:

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

  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}

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

“应用”类型上不存在属性“消息”。
类型“App”上不存在属性“lastName”。
“App”类型上不存在属性“lastName”。

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

【问题讨论】:

标签: javascript typescript visual-studio-code aurelia


【解决方案1】:

你需要声明成员:

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

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

然后错误就会消失。


编辑

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

class App {
    private message = 'Hello World!';
    private firstName = "Animesh";
    private lastName = "Bulusu";
}

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

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

class App {
    constructor(private message: string, public name: string) {}
}

【讨论】:

  • 好的,谢谢。这行得通。来自 ES5,所以我的知识几乎为零,所以我想知道这是否是我们在 C# 中使用构造函数的前进方向。如果我省略构造函数而只使用类级别的变量,我会失去什么?
  • 查看我修改后的答案
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 2017-07-15
  • 1970-01-01
相关资源
最近更新 更多