将方法添加到角度FormControl类

时间:2017-10-25 12:10:51

标签: typescript prototype

我以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, 但是在打字稿编译过程中我有几个警告和错误:

  • ShadowedName:FormControl
  • 'FormControl'仅引用类型,但在此处用作值

Actualy,我想我理解这两条消息,但我怎么能在这里做呢? 我已经阅读了官方类型的脚本文档(https://www.typescriptlang.org/docs/handbook/declaration-merging.html),找不到与我匹配的案例......

非常感谢!

1 个答案:

答案 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');