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

Ben*_*uer 2 javascript commonjs node.js typescript typescript-typings

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

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

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

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

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

  • 我克隆了Logdown存储库
  • 我在package.json克隆的Logdown存储库的文件中创建了一个"typings"条目并指出它dist/logdown.d.ts(根据" 在你的npm包中包含声明 ")
  • 我将克隆的Logdown存储库本地提供为npm package(npm link)
  • npm link logdown在我的TypeScript应用程序中运行,将此Node模块引用指向我的克隆存储库

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

export declare class Logdown {
  constructor(options: Object);
  public info(text: string): string;
}
Run Code Online (Sandbox Code Playgroud)

我希望我现在可以在我的TypeScript项目中使用Logdown,如下所示:

import Logdown = require("logdown");
let logger: Logdown = new Logdown();
logger.info('Hello World!');
Run Code Online (Sandbox Code Playgroud)

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

错误TS2304:找不到名称'Logdown'.

错误TS2351:对于类型缺少调用或构造签名的表达式,不能使用"new".

Ben*_*uer 5

我得到了它的工作:我需要在我的TypeScript应用程序中将导出格式更改为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;
Run Code Online (Sandbox Code Playgroud)

TypeScript应用程序(导入)

import Logdown = require("logdown");
...
let logger: Logdown = new Logdown();
logger.info('Hello from Logdown!');
Run Code Online (Sandbox Code Playgroud)