Búsqueda de sitios web

¿Cómo declarar una clase TypeScript ambiental para un objeto prototipo de un paquete NPM?


Tengo un paquete NPM que tiene un objeto como el siguiente:

const Lipsum = function constructor(argOne, argTwo) {
...
}

Object.assign(Lipsum.prototype, {
    firstMethod: function firstMethod(firstArg, secondArg){...}
    secondMethod: function secondMethod(){}
})

module.exports = Lipsum;

Quiero declarar una clase TypeScript ambiental para ello. He creado un archivo en mi proyecto shared/lipsum.d.ts y escribí lo siguiente:

declare class Lipsum {
    constructor(argOne: string, argTwo: number)

    firstMethod(firstArg: string, secondArg: string): string
    secondMethod(): void
}

export default Lipsum;

Estoy enfrentando el siguiente problema:

const x = new Lipsum(); // <--- this doesn't throw an error, even though the constructor must have two arguments.
x. // <--- It doesn't autocomplete here, but it autocompletes above when I put a dot after "Lipsum()".

Actualizar :

Intenté envolver la clase con una declaración de módulo, de la siguiente manera:

declare module 'lipsum'{
    export default class Lipsum {
        constructor(argOne: string, argTwo: number)

        firstMethod(firstArg: string, secondArg: string): string
        secondMethod(): void
    }
}

Sigue diciéndome:

Nombre de módulo inválido en la ampliación. El módulo 'lipsum' se resuelve en un módulo sin tipar en '/Users/yaharga/project/node_modules/lipsum/lipsum.js', el cual no puede ser ampliado.

Debo notar que el código ya está en un archivo 'lipsum.d.ts'.

Resulta que todas las importaciones deben estar dentro del ámbito de "declare module". Gracias a @drag13 por señalarme la dirección correcta.

Para obtener más información sobre el error que estaba recibiendo, usé esta publicación como referencia.

Respuesta #1

Necesitas especificar el módulo al que se relaciona tu escritura. Simplemente agrega la definición del módulo como aquí

declare module 'MODULE_NAME' {
   class Lipsum {
        constructor(argOne: string, argTwo: number)

        firstMethod(firstArg: string, secondArg: string): string
        secondMethod(): void
    }

    export default Lipsum;
}