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

TypeScript definition file for existing node module

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

Logdown 可以像这样在 Node.js 应用程序中使用:

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

可惜Logdown不提供声明,所以想写一个声明文件

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

之后,我为 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!');

但是当我编译项目时,出现以下错误:

error TS2304: Cannot find name 'Logdown'.

error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.

我成功了:我需要将定义文件 (.d.ts) 中的导出格式更改为 export = Logdown;,并将我的 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!');