gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:12 24 4
gpt4 key购买 nike

在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com