在TypeScript中声明JavaScript扩展函数

时间:2016-04-12 07:26:31

标签: javascript node.js typescript

我有这种用JavaScript编写的Node.js模块:

function main(options) {
    return "some string";
}

main.methodName = function () {
    // implementation;
};

main.objectName = {
    // a namespace;
};

main.propertyName = 123;

module.exports = main;

在TypeScript中声明这样的接口的正确方法是什么?

澄清

我问的是如何在TypeScript中为现有的Node.js模块正确声明这样的接口,因此可以从TypeScript文件中正确使用它,而不是如何在TypeScript中重新实现这样的接口。

更新

根据@toskv的建议,我添加了以下界面:

declare module "my-module" {

    // Default library interface
    interface main {
        (options?:{}):string,
        methodName():any,
        propertyName:any,
        objectName:Object
    }

    export default main;
}

但如果我这样使用它:

import * as myModule from "my-module";
var s = myModule({});

然后我收到错误Cannot invoke an expression whose type lacks a call signature.

知道为什么吗?

1 个答案:

答案 0 :(得分:3)

描述该代码的TypeScript接口将是:

interface MainIf {
    (options) : string ; // the main function
    methodName() : any;
    propertyName: number;
    objectName: Object;
}