J'ai un module npm appelé RiveScript qui est habituellement (en Javascript) instancié de cette façon:
var RiveScript = require('rivescript');
var rivescript = new RiveScript();
J'essaie d'écrire un fichier de déclaration pour le module, mais je suis bloqué à la première étape. Voici ce que j'ai écrit jusqu'à présent:
declare module "rivescript" {
interface RivescriptOptions {
utf8?: boolean;
}
class RiveScript {
constructor(options?: RivescriptOptions);
}
export default RiveScript;
}
Ensuite, je suppose que dans TypeScript, j'utiliserais le module de cette façon ( import par défaut ):
import RiveScript from 'rivescript';
let rivescript = new RiveScript();
Cependant, tsc
génère ceci, ce qui n'est pas valide car il fait référence à une fonction default()
:
const rivescript_1 = require('rivescript');
let rivescript = new rivescript_1.default();
Qu'est-ce que je fais mal?
Tu es vraiment proche. Au lieu d'utiliser export default
, vous devriez utiliser export =
.
custom-typings/rivescript.d.ts
declare module 'rivescript' {
class RiveScript {
constructor()
}
export = RiveScript
}
app.js
import RiveScript = require('rivescript');
let rivescript = new RiveScript();
Pour plus d'informations sur la rédaction de fichiers de déclaration, consultez le TypeScript Handbook . Par exemple. ils ont un modèle pour 'exporter des modules en tant que classe' .
Réponse acceptée fonctionne bien pour cette question. Mais je veux donner une autre idée
si vous voulez extend class, ajoutez une méthode dynamique à class lors de l’exécution.
vous pouvez essayer (src/plugins/processor.ts)
import server from '../../server'
declare module "../../server"{
export default interface server{
process() // it's a new method of server
}
}
export default class{ //another codes, just for show I create a 'server' instance
private instance:server
constructor{
this.instance = new server()
this.instance.process() //works
}
}
dans mon server.ts
(src/server.ts),
ma signature de classe d'exportation par défaut
export default class Server extends extend implements Startable<void>
Parce que Server est un default export
, vous pouvez donc changer server
dans export default interface server
en n'importe quel nom de variable valide.
par exemple:
export default interface anotherName