2016-05-09 18 views
1

Ich versuche, eine Typoskriptdefinitionsdatei für eine vorhandene javaScript-Bibliothek zu erstellen, bekomme aber weiterhin Laufzeitfehler.Typescript Definition Konstruktor oder Funktion?

Die Bibliothek enthält den folgenden Code:

/** 
* Pdok namespace, will hold Api namespace 
* @namespace 
*/ 
Pdok = {}; 

Pdok.Api = function(config) { 

/* implementation details are here... */ 
} 

Das JavaScript-Beispielcode, Werk geliefert wurde und enthält die folgende Zeile:

var api = new Pdok.Api(config); 

ich eine Typoskript Definitionsdatei erstellt, und bin in der Lage zu kompilieren ohne Probleme. Die Definition wie folgt aussieht:

declare namespace Pdok 
{ 
    interface configOptions { 
     /* .. details .. */ 
    } 

    class Api { 
     constructor(config: configOptions); 
    } 
} 

Zur Laufzeit bekomme ich folgende Fehlermeldung: Uncaught Typeerror: Pdok.Api ist kein Konstruktor

Was in meiner .d.ts-Datei sein sollte zu erhalten funktioniert das?

+0

Merkwürdiger, [ihr Beispiel] (http://kaart.pdok.nl/ api/api-doc/symbols/src/api_js_pdok-api.js.html) zeigt die Verwendung als 'api = Pdok.Api (config)' (keine Verwendung von 'new'), aber die' Api'-Funktion sieht wie ein Konstruktor aus (benutzt 'this' einen Haufen und gibt nichts explizit zurück). – Aaron

+0

Ja, ich bemerkte auch, dass der Code in den Kommentaren sich von den Beispielen unter https://www.pdok.nl/sites/default/files/pdokkaart/pdok-kaart-source-code-20130726.zip unterschied. Die Beispiele aus diesen Dateien funktionieren alle. Dies ist auch die Quelle, die ich für die pdok-api.js verwendet habe. –

Antwort

0

Basierend auf dieser Antwort https://stackoverflow.com/a/15008808/4516689 könnte es sein, dass die Quelle nicht korrekt geladen ist.

Legen Sie einen Debugger fest; Anweisung vor Ihrem Code und überprüfen Sie, auf was die Variable Pdok.Api festgelegt ist.

debugger; 
var api = new Pdok.Api(config); 

oder benutzen Sie diese

alert(Pdok.Api); 
var api = new Pdok.Api(config); 

sollte es zurückgeben "-Funktion (config) {..."

+0

Sie hatten Recht. Das Problem war, dass die Skripts nicht in der richtigen Reihenfolge geladen wurden. –

+0

Wenn Sie Ihre eigenen .d.ts erstellen, kann Ihnen dieser Link helfen. https://github.com/fivetran/typescript-closure-tools Erzeugt .d.ts von JSDoc. Nicht perfekt, aber als Grundlage für Ihre Definitionsdatei. – Magu

+0

Danke für den Link. Ich werde das untersuchen. –

Verwandte Themen