我来自C#背景,正在尝试为实现类型的扩展方法找到一个等效的方法。我正在使用Angular 6,但我感觉这也可能是打字稿问题。
我在应用程序中声明了一个新文件:
// myExtensions.ts
import { TypeToExtend } from 'path_to_type';
declare module 'path_to_type' {
interface TypeToExtend {
newMethod(): string;
}
}
TypeToExtend.prototype.newMethod = function(): string {
return this.Whatever + ' Hello World';
};
在我的一项服务中,我按以下方式使用它:
typeToExtendObject.newMethod();
newMethod()在VS Code智能感知中显示得很好,但是当我实际运行应用程序时,我看到了错误:
“ typeToExtendObject.newMethod()不是函数”
我是否必须以某种方式将其添加到模块中?我不能正确导出此扩展模块吗?
答案 0 :(得分:0)
只需使用export class
,您的班级就将可见,而import
则在您要使用它的位置。甚至类也可能是static
而不使用实例。
export class User {
id: number;
name: string;
car: Car;
newFunction(){
//TODO
}
}
答案 1 :(得分:0)
它变得凌乱,主要是因为大多数类型信息在编译后都会消失。您可以编写一个函数,该函数接受一个对象(实例),并使用以下方法将该对象注入:
interface NewMethodable {
newMethod(): string;
}
addExtension<T>(obj: T): T & NewMethodable {
obj.newMethod = function ...; // edited from original answer
return <T & NewMethodable>obj;
}
这几乎是袖手旁观,因此可能存在错误。