Javascript 类型脚本类:构造函数和方法
我试图在我的Typescript类中避免双重声明 在我写这样的课程之前:Javascript 类型脚本类:构造函数和方法,javascript,typescript,Javascript,Typescript,我试图在我的Typescript类中避免双重声明 在我写这样的课程之前: module ModuleName { export class ClassName { public method: () => void; constructor( private dependency: any ) { this.method = () => { dependency.
module ModuleName {
export class ClassName {
public method: () => void;
constructor(
private dependency: any ) {
this.method = () => {
dependency.someUse();
};
}
}
}
但是方法类型的声明(此处为public方法:()=>void;
)看起来毫无用处,尤其是当您已经有了一个声明它的接口时。所以我想写:
module ModuleName {
export class ClassName {
constructor(
private dependency: any ) { }
public method = () => {
this.dependency.someUse();
};
}
}
注意:为了避免在声明之前使用警告变量XXX
,我们必须将方法放在构造函数之后
但是现在,如果我们在构造函数中使用我们的方法,我们会再次收到有关此方法的警告:
module ModuleName {
export class ClassName {
constructor(
private dependency: any ) {
this.method(); // warning here
}
public method = () => {
this.dependency.someUse();
};
}
}
因此,我的问题是:我们应该如何正确地编写我们的类?
注意:由于typescript编译器更正了声明的顺序,这没什么大不了的,我只想知道是否可以编写没有双重声明和警告的类。这听起来像是TSLint的错误。您在使用WebEssentials时有任何变化吗 您可能希望禁用此规则,因为您所说的它看起来有问题。WebEssentials从用户主目录加载
tslint.json
(%userprofile%
)。您应该能够在那里找到一个tslint.json文件。这是您可以启用/禁用规则的地方
听起来下面的规则中有一个bug
no use before declare
不允许在变量声明之前使用它们`
您可以通过以下方式添加(或更改)配置来禁用此规则:
"no-use-before-declare": false
有关tslint及其规则的更多信息可在此处找到:您在声明之前使用的错误
变量XXX
是由于将类方法声明为类属性而导致的
而不是像这样声明您的方法:
public method = () => {
module ModuleName {
export class ClassName {
constructor(private dependency: any ) { }
public method() {
this.dependency.someUse();
}
}
}
声明如下:
public method() {
所以你的班级看起来是这样的:
public method = () => {
module ModuleName {
export class ClassName {
constructor(private dependency: any ) { }
public method() {
this.dependency.someUse();
}
}
}
最后,我认为删除这个警告是个坏主意,因为它在某些情况下非常有用 但我找到了解决问题的方法: 如果我们将构造函数移动到类的末尾,我们将不再收到警告:
module ModuleName {
export class ClassName {
public method = () => {
this.dependency.someUse();
};
constructor(
private dependency: any ) {
this.method();
}
}
}
如果我们看一下生成的JS,就会更容易理解发生了什么:构造函数的参数仍然放在生成函数的开头:
var ModuleName;
(function (ModuleName) {
var ClassName = (function () {
function ClassName(dependency) {
var _this = this;
this.dependency = dependency;
this.method = function () {
_this.dependency.someUse();
};
this.method();
}
return ClassName;
})();
ModuleName.ClassName = ClassName;
})(ModuleName || (ModuleName = {}));
最后一个例子中的“警告”是怎么回事?当我把代码粘贴到操场上时没有错误。那不好。如果问题尚未解决,则应向TSLint报告。