javascript - TypeScript 类型定义 : how to declare class constructors

标签 javascript node.js typescript

我有一个自制的 JavaScript 库(一个 js 文件),其中包含许多类。为了在我的 TypeScript 项目中使用它,我创建了一个 d.ts 文件,其中包含所有这些类的类型定义。典型的定义如下所示:

export interface ClassExample {
  new(param: boolean): ClassExample;
  propertyName: number|string;
  log(...args: any[]): void;
}
而且效果很好。但我受到 linter 规则的打击 @typescript-eslint/no-misused-new :“不能构造接口(interface),只能构造类”。当然,我可以为特定的 d.ts 配置我的 linter 和/或添加异常(exception)。文件,但这让我考虑是否应该有其他方法来描述我的类。如果 abstract class用声明代替?我试图查找如何为公开可用的 Node.js 模块声明类构造函数,并在 @types/node/console.d.ts 中找到此代码文件:
interface ConsoleConstructor {
  prototype: Console;
  new(stdout: WritableStream, stderr?: WritableStream, ignoreErrors?: boolean): Console;
  new(options: ConsoleConstructorOptions): Console;
}
所以,我认为,在接口(interface)中声明类构造函数并不是一个严重的罪过,如果 Node.js 的作者正在实践它?

最佳答案

根据the handbook ,您将使用 declare 声明该类关键字,像这样:

declare class ClassExample {
    constructor(param: boolean);
    propertyName: number|string;
    log(...args: any[]): void;
}
这是上面链接的部分,因为它在撰写此答案时出现(我的重点):

Classes

Documentation

You can create a greeter by instantiating the Greeter object, or create a customized greeter by extending from it.

Code

const myGreeter = new Greeter("hello, world");
myGreeter.greeting = "howdy";
myGreeter.showGreeting();

class SpecialGreeter extends Greeter {
  constructor() {
    super("Very special greetings");
  }
}

Declaration

Use declare class to describe a class or class-like object. Classes can have properties and methods as well as a constructor.

declare class Greeter {
  constructor(greeting: string);

  greeting: string;
  showGreeting(): void;
}

关于javascript - TypeScript 类型定义 : how to declare class constructors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66135714/

相关文章:

javascript - 滚动到固定导航栏的链接 ID

javascript - 如何在电子表格的 Google Apps 脚本中使用数组作为自定义函数的参数

javascript - 点击进入全屏

node.js - TS2688 : Cannot find type definition file for 'node' with @types/node installed

javascript - 正则表达式匹配前面没有另一个字符串的任何字符串

javascript - 如何像在 chrome 中一样在 node.js 中使用提示功能

php - laravel 5.4 redis服务器ddos攻击

javascript - 组织大型 JavaScript 应用程序的工具和最佳实践

javascript - Lodash,循环调用函数并返回第一个匹配结果

html - Angular 嵌套的可拖动行和列