我以FormControl为例,但它可以应用于模块中的任何构造函数方法。
假设我想将方法myMethod(string): FormControl
添加到ReactiveForm的现有FormControl类中。
我以为我可以这样做:
import {FormControl} from '@angular/forms';
declare module '@angular/forms' {
interface FormControl {
myMethod(value: string): FormControl;
}
}
FormControl.prototype.myMethod = function(value) { /*TODO*/ };
const formControl = new FormControl('').myMethod('hello');
我会使用纯javacript, 但是在打字稿编译过程中我有几个警告和错误:
Actualy,我想我理解这两条消息,但我怎么能在这里做呢? 我已经阅读了官方类型的脚本文档(https://www.typescriptlang.org/docs/handbook/declaration-merging.html),找不到与我匹配的案例......
非常感谢!
答案 0 :(得分:2)
FormControl
实际上来自角度内的另一个模块,也就是你需要增加的模块。我通过在Visual Studio Code中使用go to definition命令找到了。此外,我冒昧地为您的增强功能添加this
参数:
import {FormControl} from '@angular/forms';
declare module '@angular/forms/src/model' {
interface FormControl {
myMethod(value: string): FormControl;
}
}
FormControl.prototype.myMethod = function(this: FormControl, value: string) {
return this;
};
const formControl = new FormControl('').myMethod('hello');