在Typescript中的window.Node扩展

时间:2017-04-14 12:15:04

标签: angular typescript

我正在尝试向window.Node

添加一个新方法
interface Node {
    myMethod(selector: any): any
}

Node.prototype.myMethod = (selector) => {
   //some code
}

并在我的代码中使用它,但未定义此方法。正如我在运行“离子服务”后所理解的那样,这段代码不包含在构建版本中。

我的tsconfig.json文件

"compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [
        "dom",
        "es2015"
    ],
    "module": "es2015",
    "moduleResolution": "node",
    "sourceMap": true,
    "target": "es5"
},
"files": [
    "src/app/customextensions/extensions.ts" //file with my new method
],
"include": [
    "src/**/*.ts"
],
"exclude": [
    "node_modules"
],
"compileOnSave": false,
"atom": {
    "rewriteTsconfig": false
}

我试图添加

/// <reference path="customextensions/extensions.ts" />

到我的app.component.ts但它仍然不起作用。

更新: Extension methods in typescript (system) - 保罗的解决方案解决了我的问题。

1 个答案:

答案 0 :(得分:0)

Typescript不会为接口生成任何代码。去打字稿操场并检查。 [https://www.typescriptlang.org/play/][1]

在你的extensions.ts中:

export interface Node {
   myMethod(selector: any): any
}
export const MyNode : Node = {
  myMethod(selector: any): any { 
    // put a function body here 
 }
}

在您的代码中,您可以导入MyNode并在其上调用方法

import {MyNode} from 'app/customextensions/extensions';

MyNode.myMethod();