为默认导出模块

时间:2016-08-23 19:13:11

标签: typescript typescript-typings

我有一个名为RiveScript的npm模块,通常(在Javascript中)以这种方式实例化:

var RiveScript = require('rivescript');
var rivescript = new RiveScript();

我正在尝试为模块编写一个声明文件,但是我在第一步陷入困境。这是我到目前为止所写的内容:

declare module "rivescript" {

    interface RivescriptOptions {
        utf8?: boolean;
    }

    class RiveScript {
        constructor(options?: RivescriptOptions);
    }

    export default RiveScript;
}

然后我想在Typescript中我将以这种方式使用模块(默认导入):

import RiveScript from 'rivescript';
let rivescript = new RiveScript();

但是,tsc生成此内容,因为它引用了default()函数,因此无效:

const rivescript_1 = require('rivescript');
let rivescript = new rivescript_1.default();

我做错了什么?

2 个答案:

答案 0 :(得分:0)

可接受的答案在此问题上效果很好。但我想提出另一个想法

如果要扩展类,请在运行时将动态方法添加到类中。

您可以尝试(src / plugins / processor.ts)

    import server from '../../server'

    declare module "../../server"{
        export default interface server{
            process() // it's a new method of server
        }
    }

    export default class{ //another codes, just for show I create a 'server' instance
        private instance:server
        constructor{
            this.instance = new server()
            this.instance.process() //works
        }
    }

在我的server.ts(src / server.ts)中,

我的默认导出类签名

    export default class Server extends extend implements Startable<void>

因为服务器是default export,所以您可以将server中的export default interface server更改为任何有效的变量名称

例如:

export default interface anotherName    

答案 1 :(得分:0)

如果您正在寻找适用于默认导出函数的解决方案:

declare module "my-module" {
  function myFunction(foo: number): string;

  export default myFunction;
}