2016-09-12 15 views
3

私はlibmarkovをnpmから使用したいTypeScriptプロジェクトを持っています。 Generatorと呼ばれるES6でインポート可能なクラスを提供します。 new Generator('some text')で使用します。私の地元のプロジェクトでTypescript定義、ES6クラス、およびコンストラクタ

、私はファイルtypedefs/libmarkov.d.ts作成:私はそれをインストールするtypingsを使用

export class Generator { 
    constructor(text: string); 
    generate(depth: number); 
} 

を:typings install --save file:./typedefs/libmarkov.d.ts

しかし、この:let generator = new Generator('Foo Bar Baz');

が...このコンパイラエラーを生成し、 :

Error:(5, 21) TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. 

私は自分のコンストラクタを変更することができます:constructor(text: string) {};

を...しかし、これは与える:

Error:(2, 31) TS1183: An implementation cannot be declared in ambient contexts. 

それが重要ならば、私はTS 2.0をターゲットにしています。

+0

は私がexport' 'と交換した場合、私はまだnew''についてのエラーを取得する '' declare' –

+0

とexport'を交換してくださいだろう。 ''コンストラクタ 'の最後に' {} 'を追加すると' new'というエラーが出ますが、 'エラー:(2、31)TS1183:実装は環境コンテキストで宣言できません。 –

答えて

2

これはJSライブラリですので、私はあなたが定義がある、あなたの外部モジュールの定義が

declare module "libmarkov" { 

    export class Generator { 
     constructor(text: string); 
     generate(depth: number); 
    } 
} 

EDIT のように見える必要があり、その場合には

import {Generator} from "libmarkov" 

ようなもので、それをロード疑います違う; libmarkovはa default exportを使用しているようです。

declare module "libmarkov" { 

    export default class Generator { 
     constructor(text: string); 
     generate(depth: number); 
    } 
} 

と輸入は

import Generator from 'libmarkov' 
+0

はい、 'typings'を実行した後、' typings/modules/libmarkov/index.d.ts'の結果になります。私は '型宣言'が 'libmarkov.d.ts'を'宣言モジュール 'にラップすると思います。しかし、私はまだ '新しい'についてのエラーにこだわりました。 –

+0

定義が間違っています。 libmarkovはデフォルトのエクスポートを使用しているようです。上記の編集を参照してください –

+0

これは周囲/グローバルなどを理解するのに役立つ質問です。このシナリオ( 'node_modules'の外部ES6モジュール)では、' typings'を実行した後、 'libmarkov'を' typings/globals'または 'タイピング/モジュール'?意味、私は '入力 - グローバル - セーブ'または単に 'タイピング - セーブ'をしますか? –

関連する問題