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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用类中的构造函数的Typescript将不允许使用new关键字相关的知识,希望对你有一定的参考价值。

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

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

}
答案

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

这个:

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”,这也使它们成为类的属性。

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

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

以上是关于使用类中的构造函数的Typescript将不允许使用new关键字的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 的派生类中进行构造函数重载?

Typescript构造函数和继承

c++中的虚函数有啥作用?

如何从同一个类中的另一个构造函数调用抽象类的构造函数(方法重载)[重复]

13-TypeScript单例模式

如何在C ++中的另一个类中声明一个类的构造函数