在 TypeScript 中手动和自动分配构造函数参数

tru*_*k18 4 typescript

TypeScript到目前为止,以下代码是我一直用来定义构造函数的代码。

export class DashboardComponent {
    private heroService: HeroService;
    constructor(heroService: HeroService){
        this.heroService = heroService
    }
}  
Run Code Online (Sandbox Code Playgroud)

但最近当我检查Angular 2 文档时,我看到语法更短,看起来像

export class DashboardComponent {
    constructor(private heroService: HeroService){}
}   
Run Code Online (Sandbox Code Playgroud)

编译后的 JavaScript 是一样的

var DashboardComponent = (function () {
    function DashboardComponent(heroService) {
        this.heroService = heroService;
    }
    return DashboardComponent;
}());
Run Code Online (Sandbox Code Playgroud)

因为TypeScript 文档中仅显示第一种类型,所以我只想确保两个类型相同,并且我对这两种类型的处理都正确。

感谢有人可以帮我确认一下吗?

Kew*_*sse 8

是的,这两种写法实际上是相同的。您可以在 GitHub上public的官方语言规范中看到使用的第二个。

所以,

class BankAccount {  
    constructor(public balance: number) {}  
}
Run Code Online (Sandbox Code Playgroud)

是相同的

class BankAccount {
    public balance: number
    constructor(balance: number) {
        this.balance = balance;  
    }  
}
Run Code Online (Sandbox Code Playgroud)

另外,关于生成的 JavaScript 代码的注释:使用privatepublic不会更改输出。因为在纯 JavaScript 中,不存在“私有”成员这样的东西:您无法阻止对对象成员的访问。唯一的作用publicprivate作用是告诉 TypeScript 哪些内容应该被其他代码访问,哪些内容不应该被其他代码访问。