2016-05-30 84 views
1

TypeScript中的类属性约定(标准)是什么?TypeScript getter setter约定

在角2演示(英雄游angular.io)的所有属性都设置为公开:

export class Hero { 
    id: number; 
    name: string; 
} 

这样他们就可以被实例化两种方式:

var hero: Hero = new Hero(); 
hero.id = 0; 
hero.name = "hero"; 

var hero2: Hero = {id : 0, name: "hero"}; 

是否有Java风格的约定(像这样):

export class Hero { 
    private id: number; 
    private name: string; 

    setId(id: number): Hero { 
     this.id = id; 
     return this; 
    } 

    setName(name: string): Hero { 
     this.name = name; 
     return this; 
    } 

    getId(): number { 
     return this.id; 
    } 

    getName(): string { 
     return this.name; 
    } 
} 

宣言(为例):

var hero: Hero = new Hero(); 
hero.setId(0).setName('hero'); 

var hero2: Hero = new Hero().setId(0).setName('hero'); 
+3

可能重复的http://stackoverflow.com/questions/12827266/get-and-set-in-typescript –

+0

这可能有帮助吗?http://stackoverflow.com/questions/12713659/typescript-private-members –

+0

注意'英雄instanceof Hero === true'而'hero2英雄=== false'因此它们是不一样的。 –

回答

-2

是否有一个Java风格的约定(像这样)

你能做到这一点(事实上,我有)。人们使用getter/setter还有:

export class Hero { 
    private _id: number; 

    set id(id: number) { 
     this._id = id; 
    } 
} 

但是,注意不要放太多的逻辑setter方法:https://basarat.gitbooks.io/typescript/content/docs/tips/propertySetters.html。我通常更喜欢明确的函数调用。

var hero2: Hero = {id : 0, name: "hero"}; 

这是打字稿的类型检查的结构性质的弱点(或便利强度)。 More on this.

+0

没有人禁止你这样做,但这不是惯例,它是过度说明性的,可以非常迅速地变得非常难看 –

0

打字稿被转换成计划javascript,所以...如果你需要某些东西在设定值之前或之后,如何登录,你要实​​现。 如果没有必要,getter和setter是矫枉过正。 对于我来说,实例化和设置器对于Java来说是一样的。

例子:

export class Person{ 
    public name: string; 
    public anotherAttribute: string; 
    private age: number; 
    private _birth: Date; 

    public set birth(birt: Date){ 
     this._birth = birth; 
     this.age = calculateAge(birth); 
    } 
    ....... 
} 


let person: Person = new Person(); 
person.name = "John"; 
...... 
0

有没有Java的方式约定

那么你可以做,如果你想,但因为他们是不同的语言,你可能应该使用打字稿约定通常直接访问“成员”通过。符号......这对于任何使用打字稿的人来说都是可读的,对于java开发人员来说也是如此。)我尽可能多的了解java,我知道编码通常会让我输入2次有用的东西。

事实上,它的开发者认为语言如Java是overdeclarative

TL之间的共同笑话;医生没有..使用myObject.myMember访问成员直接

0

那么你可以做,如果你想,但因为他们是不同的语言