私は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();
_
私は何を間違えていますか?
あなたは本当に近いです。 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 をご覧ください。例えば。クラスとしてモジュールをエクスポートするためのテンプレートがあります。
受け入れられた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 server
のserver
を任意の有効な変数名に変更できます。
例えば:
export default interface anotherName