Typescript在方法中设置类本身的值,继承自基类



如何在自己的方法中设置类本身的值?试图利用this。收到以下错误。

export class ProductForm extends FormGroup {
constructor(){
super({
productName: new FormControl()
})
}

addMoreFieldsTest(): void {
this = {
productName: new FormControl(),
productDescription: new FormControl()
}
}

错误:赋值表达式的左边必须是变量或属性访问。

我可以使用AddControl方法,但是为了学习的目的,我想设置类本身。

更新答案

FormControl的控件不直接驻留在FormGroup类中,而是驻留在一个名为controls的类的属性中

因此,如果您只是希望在扩展类上添加控件,您只需要操作controls属性。

export class ExtendedFormGroup extends FormGroup {
constructor(
controls: { [k: string]: AbstractControl },
validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions,
asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[]
) {
super({...controls, alwaysPresent: new FormControl()}, 
validatorOrOpts, 
asyncValidator
);
this.extendedProperties();
}

extendedProperties() {
this.controls["additional_control"] = new FormControl("");
}
}
上面的示例做了两件事
  • 将构造函数参数传递给super,并在控件上添加一个附加的always present项。
  • 直接操作controls属性,反映在你原来的问题。

简单地调用new ExtendedFormGroup({})现在将创建一个FormGroup与两个预定义的控制器alwaysPresentadditional_control

老反应由于JavaScript和TypeScript通过扩展实现的类本质上都是带有原型的标记块,所以你可以使用方括号符号来访问类的this作用域上的属性。

class Parent {
foo: string;
constructor(foo: string) {
this.foo = foo;
}
}

class Child extends Parent {
constructor(foo: string) {
super(foo);
this.assignPropertiesDirectly();
}

assignPropertiesDirectly() {
this["bar"] = "Creates 'bar' on Child";
this["foo"] = "overwrites foo with this text";
}
}

然而,这种方法是脆弱的,因为它不仅完全违背了使用TypeScript的初衷,而且它还依赖于为属性名输入字符串值,这在最好的情况下会给维护带来麻烦,在最坏的情况下会容易出错。

听起来你的问题可能是作文设计的一个很好的候选。

最新更新