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

问题描述 投票:0回答:1

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

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
    ) { }

}
angular typescript constructor
1个回答
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”,这也使它们成为类的属性。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.