2016-09-29 12 views
2

私のタイプスクリプトプロジェクトでは、Logdownを使いたいと思います。既存のノードモジュールのタイプスクリプト定義ファイル

Logdownは、このようなNode.jsのアプリケーションで使用できます。

var Logdown = require('logdown') 
var logger = new Logdown({prefix: 'test'}) 
logger.info('Hello World'); 

残念ながら、Logdownは宣言を提供していないので、私は宣言ファイルを書きたかったです。この小さなプロジェクトをキックスタート

は、私は次のようでした:

  • を私はクローン化されたLogdownリポジトリのpackage.jsonファイルで「タイピング」のエントリを作成し、それを行う指摘Logdownリポジトリ
  • をクローン化しdist/logdown.d.ts
  • ( "Including declarations in your npm package" による)私は
  • npm link)NPMパッケージとしてクローン化Logdownリポジトリがローカルで利用できるように私は私のTypeScrip内npm link logdownを走りましたTアプリケーションは、私がlogdown.d.tsファイルのコンテンツを作成した後、私のクローンリポジトリ

に、このノードモジュールの参照を指すように:

export declare class Logdown { 
    constructor(options: Object); 
    public info(text: string): string; 
} 

私は私がように私の活字体のプロジェクトで今Logdownを使用することができることを期待していましたこの:

import Logdown = require("logdown"); 
let logger: Logdown = new Logdown(); 
logger.info('Hello World!'); 

しかし、私はプロジェクトをコンパイルするとき、私は次のエラーを取得:

エラーTS2304:「ログアウト」という名前が見つかりません。

エラーTS2351:型がコールまたは構造シグネチャを持たない式で 'new'を使用できません。

+0

これは、単純なタイプミスが考えられます。それは、パッケージ 'で' types'つづら.json'ではなく、 'typings'です。また、これは2.0より古いtypescriptでは機能しません。 – artem

+0

セットアップは大丈夫です。 「入力」フィールドは「タイプ」と同義であることに注意してください。問題は 'logdown.d.ts'にあると思います。 –

答えて

5

私はそれが働いてしまった:私は、定義ファイル(.d.ts)と私の活字体のアプリケーションでimport Logdown = require("logdown");へのインポート形式でexport = Logdown;にエクスポート形式を変更する必要がありました。

Logdown.d.ts(エクスポート定義)

declare class Logdown { 
    constructor(options?: Object); 
    public log(...args: string[]): void; 
    public info(...args: string[]): void; 
    public warn(...args: string[]): void; 
    public debug(...args: string[]): void; 
    public error(...args: string[]): void; 
    public static disable(...args: string[]): void; 
    public static enable(...args: string[]): void; 
} 

export = Logdown; 

活字体アプリケーション(インポート)

import Logdown = require("logdown"); 
... 
let logger: Logdown = new Logdown(); 
logger.info('Hello from Logdown!'); 
関連する問題