使用类中的构造函数的Typescript将不允许使用new关键字

时间:2017-12-22 19:39:49

标签: angular typescript constructor

我希望能够新建我的菜单类但是在使用构造函数时我不能这样做,为什么会这样?

model = new Menu();

这样我就可以设置每个属性

this.model.AppGroupID = UserID;

成分:

import { Menu } from '../../models/menu-model';

model = new Menu();

let UserID = params['UserID'];
this.model.AppGroupID = UserID;

当不使用构造函数

时,ABOVE工作正常

menu-model.ts文件

export class Menu {
   UserID: number;
   AppID: number;
   NavAppID: number;
   AppGroupID: number;
   SelectedCaseID: number;
   SelectedRoleID: number;
}

所以上面的工作正常 但为什么以及如何使用构造函数呢?任何好处?

export class Menu {
    constructor(
        public UserID: number,
        public AppID: number,
        public NavAppID: number,
        public AppGroupID: number,
        public SelectedCaseID: number,
        public SelectedRoleID: number
    ) { }

}

1 个答案:

答案 0 :(得分:2)

我认为你会混淆几个不同的概念。

此:

export class Menu {
   UserID: number;
   AppID: number;
   NavAppID: number;
   AppGroupID: number;
   SelectedCaseID: number;
   SelectedRoleID: number;
}

与此基本相同:

export class Menu {

    constructor(
    ) { }

   UserID: number;
   AppID: number;
   NavAppID: number;
   AppGroupID: number;
   SelectedCaseID: number;
   SelectedRoleID: number;
}

即。如果你没有指定一个构造函数,它基本上与一个空构造函数相同(我基本上说,如果你扩展一个基类,它会略有不同)。

但是这个:

export class Menu {
    constructor(
        public UserID: number,
        public AppID: number,
        public NavAppID: number,
        public AppGroupID: number,
        public SelectedCaseID: number,
        public SelectedRoleID: number
    ) { }
}

不同。如果使用参数定义构造函数,则需要在调用构造函数时为这些参数提供参数。

因为您将构造函数参数声明为“public”,这也使它们成为类的属性。

这或许令人困惑?您不需要在构造函数中创建这些属性,这只是一种方便的简写。

如果不想在构造函数调用中指定参数,请不要将它们作为构造函数的参数,而是直接在类体中声明它们,如第一个示例所示。