繁体   English   中英

TypeScript 类型定义:如何声明 class 构造函数

[英]TypeScript type definitions: how to declare class constructors

我有一个自制的 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 :“不能构造接口,只能构造类”。 当然,我可以配置我的 linter 和/或为特定的d.ts文件添加例外,但这让我考虑是否应该有其他方法来描述我的类。 是否应该abstract class声明? 我试图查找如何为公开可用的 Node.js 模块声明 class 构造函数,并在@types/node/console.d.ts文件中找到此代码:

interface ConsoleConstructor {
  prototype: Console;
  new(stdout: WritableStream, stderr?: WritableStream, ignoreErrors?: boolean): Console;
  new(options: ConsoleConstructorOptions): Console;
}

所以,我想,如果 Node.js 的作者在实践它,在接口中声明 class 构造函数并不是一个严重的罪过?

根据手册,您将使用declare关键字声明 class ,如下所示:

declare class ClassExample {
    constructor(param: boolean);
    propertyName: number|string;
    log(...args: any[]): void;
}

这是上面链接的部分,因为它在撰写此答案时出现(我的重点)

课程

文档

您可以通过实例化Greeter greeter创建一个欢迎程序,或者通过扩展它来创建一个自定义的greeter程序。

代码

const myGreeter = new Greeter("hello, world"); myGreeter.greeting = "howdy"; myGreeter.showGreeting(); class SpecialGreeter extends Greeter { constructor() { super("Very special greetings"); } }

宣言

使用declare class来描述classclass -like object。 类可以具有属性和方法以及constructor

 declare class Greeter { constructor(greeting: string); greeting: string; showGreeting(): void; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM