在构造函数中创建属性

时间:2019-02-17 18:13:57

标签: angular typescript angular6

我将通过一个教程,作者将在构造函数中创建类的属性。有理由这样做而不是在类本身中创建属性吗?

我的背景是C#,所以我在构造函数中传递参数的原因是确保在实例化该类时,传递构造函数中的参数。

这是作者写的代码:

export class Exercise {
    constructor(
        public name: string,
        public title: string,
        public description: string,
        public image: string,
        public nameSound?: string,
        public procedure?: string,
        public videos?: Array<string>
    ) {

    }
}

这是我创建类的方式:

export class Exercise {

    public name: string,
    public title: string,
    public description: string,
    public image: string,
    public nameSound?: string,
    public procedure?: string,
    public videos?: Array<string>

}

2 个答案:

答案 0 :(得分:1)

在构造函数中创建属性时,例如:

constructor (public x: string) {
}

是同一件事:

public x: string;
constructor (x: string) {
    this.x = x;
}

所以,您只是做相同的事情,但是写的少了一点。 希望对您有所帮助。

答案 1 :(得分:1)

使用访问修饰符(publicprivateprotected)定义构造函数中的参数使您可以在类的实例化期间分配值。

class MyConvenientClass {
  constructor(public myProp: string) {}
}
const myInstance = new MyConvenientClass('someValue')

如果仅声明这些属性,则必须稍后分配它们,这并不方便。

class MyMundaneClass {
  public myProp: string
}
const myInstance = new MyMundaneClass()
myInstance.myProp = 'someValue'

还有另外一个区别。如果在TS配置中设置了strictPropertyInitialization标志,则必须将在myProp中键入的MyMundaneClass更改为string | undefined。这是因为TS无法确定该值是否始终存在,因此需要您明确说明这种可能性。