2016-09-29 64 views
2

在我的TypeScript項目中,我想使用Logdown現有節點模塊的TypeScript定義文件

Logdown可以使Node.js應用程序中使用這樣的:

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

不幸的是,Logdown不提供報關單,所以我想寫一個聲明文件。

與Kickstart這個小項目,我做了以下內容:

  • 我克隆Logdown庫
  • 我創造了package.json文件克隆Logdown庫的「分型」項,並指出它做dist/logdown.d.ts (據 「Including declarations in your npm package」)
  • 我做了我TypeScrip內的克隆Logdown庫當地現有的NPM包(npm link
  • 我跑npm link logdown科技應用到這個節點模塊的參考點到我的克隆庫

之後,我創建了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:找不到名稱'Logdown'。

錯誤TS2351:不能對類型缺少調用或構造簽名的表達式使用'new'。

+0

這可能是一個簡單的拼寫錯誤:它的拼寫''在包types' .json',而不是'typings'。此外,這不適用於2.0以上的打字稿。 – artem

+0

設置沒問題。請注意,「類型」字段與「類型」同義。我認爲問題出現在'logdown.d.ts'中。 –

回答

5

我得到它的工作:我需要導出的格式更改爲export = Logdown;在我的打字稿應用程序定義文件(.d.ts)和進口格式import Logdown = require("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!'); 
相關問題