现有节点模块的TypeScript定义文件

在我的TypeScript项目中,我想使用Logdown 。

Logdown可以在Node.js应用程序中使用,如下所示:

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

不幸的是,Logdown不提供声明,所以我想写一个声明文件。

为了启动这个小项目,我做了以下工作:

  • 我克隆了Logdown资源库
  • 我在克隆的Logdown仓库的package.json文件中创build了一个“typings”条目,并指出它是否执行dist/logdown.d.ts (根据“ 在npm包中包含声明 ”)
  • 我使用克隆的Logdown版本库作为npm包( npm link
  • 我在TypeScript应用程序中运行npm link logdown ,将这个Node模块引用指向我的克隆库

之后,我创build了logdown.d.ts文件的内容:

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

我希望我现在可以在我的TypeScript项目中使用Logdown:

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

但是,当我编译项目,我得到以下错误:

错误TS2304:找不到名称“Logdown”。

错误TS2351:不能对types缺less调用或构造签名的expression式使用“新”。

我得到它的工作:我需要更改导出格式export = Logdown; 在定义文件( .d.ts )和导入格式中import Logdown = require("logdown"); 在我的TypeScript应用程序中。

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; 

TypeScript应用程序(导入)

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