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

TypeScript definition file for existing node module

本文关键字:TypeScript 定义 文件 模块 节点      更新时间:2023-09-26

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

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

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

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

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

  • 我克隆了Logdown存储库
  • 我在克隆的Logdown存储库的package.json文件中创建了一个"typings"条目,并将其指向dist/logdown.d.ts(根据"在你的npm包中包含声明")
  • 我将克隆的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:找不到名称'Logdown'.

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

我让它工作:我需要改变导出格式为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 Application (Import)

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