javascript - 现有 Node 模块的 TypeScript 定义文件

标签 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 文件中创建了一个“typings”条目,并指出它执行 dist/logdown.d.ts (根据“Including declarations in your npm package“)
  • 我将克隆的 Logdown 存储库作为 npm 包在本地提供(npm 链接)
  • 我在 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!');

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

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;,并将导入格式更改为 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!');

关于javascript - 现有 Node 模块的 TypeScript 定义文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39774108/

相关文章:

javascript - 如何在 nodejs 模块中监视类方法

node.js - 响应错误 : Expected 4 or 0 byte int

javascript - sIFR 动态改变父元素悬停文本的颜色

javascript - FadeIn 和 FadeOut 跳转页面

javascript - 如何在 JS 文件中添加 wordpress 永久链接(onclick、window.open)?

javascript - 返回 jade 中的复选框值。使用node.js、express 和 Mongoose

javascript - 处理API调用中丢失的数据

javascript - 如何在渲染后动态取消选中和选中 Nebular 复选框

javascript - 如何使 HostListener 用于滚动工作?

javascript - Redis递归:超出最大调用堆栈大小