Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Angular 6中声明扩展方法_Javascript_Angular_Typescript_Angular6 - Fatal编程技术网

Javascript 在Angular 6中声明扩展方法

Javascript 在Angular 6中声明扩展方法,javascript,angular,typescript,angular6,Javascript,Angular,Typescript,Angular6,我来自C#背景,试图在实现类型扩展方法方面找到一个等价物。我使用Angular 6,但我觉得这可能也是一个打字问题 我已在我的应用程序中声明了一个新文件: // myExtensions.ts import { TypeToExtend } from 'path_to_type'; declare module 'path_to_type' { interface TypeToExtend { newMethod(): string; } } TypeToExtend.pr

我来自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代码intellisense中显示得很好,但是当我实际运行应用程序时,我看到了错误:

“typeToExtendObject.newMethod()不是函数”


我是否必须以某种方式将其添加到我的模块中?我是否没有正确导出此扩展模块?

只需使用
导出类
,您的类将可见,并且
将其导入到您想要使用它的地方。甚至类也可以是静态的,不使用实例

export class User {
  id: number;
  name: string;
  car: Car;

  newFunction(){
    //TODO
  }

}

它变得很混乱,主要是因为编译后大部分类型信息都消失了。您可以编写一个函数来获取一个对象(实例),并向该对象嵌入以下方法:

interface NewMethodable {
    newMethod(): string;
}
addExtension<T>(obj: T): T & NewMethodable {
    obj.newMethod = function ...;  // edited from original answer
    return <T & NewMethodable>obj;
}
接口新方法{
newMethod():字符串;
}
addExtension(对象:T):T&NewMethodable{
obj.newMethod=函数…;//根据原始答案编辑
返回obj;
}

这是非常即兴的,因此可能存在bug。

您是否在使用扩展的地方导入扩展模块?是的,我指的是具有属性和函数的模型,我试图在现有模型上定义新函数@提香,我在哪里导入模块?在我的服务所在的角度模块中?既然我没有导出扩展名typescript文件中的模块,我会在imports数组中放入什么?类似于
import{TypeToExtend}从'path_到'u type';导入“/myExtensions”
这将适用于
TypeToExtend
实例,但不会对其进行模拟。将import./myExtensions添加到我的angular服务中不起作用。实际上,OP似乎正在尝试向现有类(其他人编写的)添加方法。必须尝试(也许@Lexi可以注释),但typescript/angular是否支持继承,在您的示例中,用户可以从my TypeToExtend继承?导出类用户:TypeToExtend{..然后我可以定义我的扩展方法,并且仍然引用'this'来引用TypeToExtend属性是的,您可以使用
extends
关键字来对某个对象进行子类化;但是它不再是一个扩展方法(这是一个dotNET概念)。