我有一个自制的 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 theGreeter
object, or create a customizedgreeter
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 aclass
orclass
-like object. Classes can have properties and methods as well as aconstructor
.declare class Greeter { constructor(greeting: string); greeting: string; showGreeting(): void; }
关于javascript - TypeScript 类型定义 : how to declare class constructors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66135714/