Tengo una biblioteca JavaScript casera (un archivo js) que contiene varias clases. Para usarlo en mis proyectos de TypeScript, he creado un archivo d.ts que contiene definiciones de tipo para todas esas clases. Una definición típica se vería así:
export interface ClassExample { new(param: boolean): ClassExample; propertyName: number|string; log(...args: any[]): void; } Y funciona bien. Pero estoy siendo golpeado por la regla de linter @typescript-eslint/no-misused-new : "No se pueden construir interfaces, solo clases". Por supuesto, puedo configurar mi linter y/o agregar excepciones para el archivo d.ts en particular, pero esto me hace contemplar si debería haber algún otro enfoque para describir mis clases. ¿Debería usarse una declaración abstract class en su lugar? Traté de buscar cómo se declaran los constructores de clase para los módulos Node.js disponibles públicamente y encontré este código en el archivo @types/node/console.d.ts :
interface ConsoleConstructor { prototype: Console; new(stdout: WritableStream, stderr?: WritableStream, ignoreErrors?: boolean): Console; new(options: ConsoleConstructorOptions): Console; }Entonces, supongo que declarar constructores de clases en la interfaz no es un pecado grave, si los autores de Node.js lo están practicando.
De acuerdo con el manual , declararías esa clase con la palabra clave declare , así:
declare class ClassExample { constructor(param: boolean); propertyName: number|string; log(...args: any[]): void; }Aquí está la sección vinculada anteriormente tal como aparece cuando se escribió esta respuesta (mi énfasis) :
Clases
Documentación
Puede crear un
greetercreando una instancia del objetoGreetero crear ungreeterpersonalizado al ampliarlo.Código
const myGreeter = new Greeter("hello, world"); myGreeter.greeting = "howdy"; myGreeter.showGreeting(); class SpecialGreeter extends Greeter { constructor() { super("Very special greetings"); } }Declaración
Use
declare classpara describir unaclassoclassobjeto similar a una clase. Las clases pueden tener propiedades y métodos, así como unconstructor.declare class Greeter { constructor(greeting: string); greeting: string; showGreeting(): void; }