web-dev-qa-db-ja.com

デフォルトのエクスポートモジュールの宣言ファイルを作成する

私は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();
_

私は何を間違えていますか?

19
julien_c

あなたは本当に近いです。 export defaultを使用する代わりに、export =を使用する必要があります。

custom-typings/rivescript.d.ts

declare module 'rivescript' {
  class RiveScript {
    constructor()
  }
  export = RiveScript
}

app.js

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

宣言ファイルの書き方の詳細については、 TypeScript Handbook をご覧ください。例えば。クラスとしてモジュールをエクスポートするためのテンプレートがあります。

32
Pelle Jacobs

受け入れられたanwserはこの質問にうまく機能します。しかし、私は別のアイデアを出したいです

extends classにしたい場合は、実行時にクラスに動的メソッドを追加します。

試すことができます(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であるため、export default interface serverserverを任意の有効な変数名に変更できます。

例えば:

export default interface anotherName    
0
toffee