TypeScript - DefinitelyTyped .d.ts Definitionen erweitern
Ich versuche, Nightmare in TypeScript mit den Typen von DefinitelyTyped zu verwenden. Allerdings sind die Typen dort unvollständig (die then-Methode fehlt) und ich möchte auch dynamisch einige Methoden hinzufügen (wie es in diesem Plugin gemacht wird).
Ich verstehe nicht, wie man die Schnittstelle von Nightmare erweitern kann, ohne DefinitelyTyped zu forken. Ich habe ein paar Seiten zu diesen Fragen gelesen:
Schnittstelle erweitern, die in .d.ts-Datei definiert ist
http://obaidurrehman.github.io/2015/10/30/extending-typeScript-definitions/
Also habe ich versucht, eine extendNightmare.d.ts-Datei zu erstellen, die ich zusammen mit all meinen anderen .ts-Dateien abgelegt habe.
declare namespace Nightmare {
class Nightmare {
waitForDevTools(): void;
then(): Nightmare;
}
}
An diesem Punkt weiß ich nicht, was ich tun soll, um dem Compiler zu sagen, meine neue Definition zu verwenden, die die bestehende Definition erweitern soll.
Ich habe versucht, diese Zeile mit Nightmare oben in die Datei einzufügen, aber es hat nicht funktioniert:
/// <reference path="./extendNightmare.d.ts"/>
Außerdem möchte ich die Schnittstelle IConstructorOptions aus dem Nightmare-Namespace erweitern, aber ich weiß nicht, wie das geht. Ist das korrekt?
declare namespace Nightmare {
class Nightmare {
waitForDevTools(): void;
then(): Nightmare;
}
export interface IConstructorOptions {
switches: any;
}
}
Der Code, den ich benutze, um dieses Problem zu reproduzieren:
/// <reference path="./extendNightmare.d.ts"/>
import * as Nightmare from "nightmare";
const switches = {
"ignore-certificate-errors": true,
"proxy-server": "localhost:10000",
};
function render_page(url) {
const options = {
switches,
};
const nightmare = new Nightmare(options);
nightmare
.goto(url)
.then((infos) => {
console.info(infos);
})
.end()
.then(() => {
console.info(`${url}: done`);
});
}
render_page("https://google.com");
In meiner package.json habe ich:
"nightmare": "^2.9.1",
"@types/nightmare": "^1.6.30",