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

时间:2016-09-29 15:15:30

标签: javascript node.js typescript commonjs typescript-typings

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

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

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

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

为了启动这个小项目,我做了以下事情:

  • 我克隆了Logdown存储库
  • 我创建了一个"打字"在克隆的Logdown存储库的package.json文件中输入并指出它dist/logdown.d.ts(根据" Including declarations in your npm package")
  • 我将克隆的Logdown存储库作为npm包(npm link
  • 在本地提供
  • 我在我的TypeScript应用程序中运行npm link logdown,将此Node模块引用指向我的克隆存储库

之后我创建了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:找不到姓名'记录'。

     

错误TS2351:无法使用' new'使用表达式,其类型缺少调用或构造签名。

1 个答案:

答案 0 :(得分:5)

我明白了:我需要在定义文件(export = Logdown;)中将导出格式更改为.d.ts,并在我的TypeScript应用程序中将导入格式更改为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;

TypeScript应用程序(导入)

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