2017-02-23 4 views
2

Ich habe einige Javascript-Code, der d3 sankey Plugin zum Erstellen eines Diagramms verwendet. In meinem neuen Projekt muss ich denselben Code wiederverwenden, aber das neue Projekt ist in Typoskript. Ich suche nach einer DefinitelyTyped Datei für das Plugin. Ich blätterte durch https://github.com/DefinitelyTyped/DefinitelyTyped, konnte es aber nicht finden.Typescript Typ Definition für d3 sankey

Gibt es einen anderen Ort, an dem ich diese Datei bekommen kann?

Sankey-Plugin Link: https://github.com/d3/d3-sankey

Auch ohne d.ts Datei für dieses Plugin, ist es eine Möglichkeit, es durch Typoskript zugreifen?

Der Code in d3 Plugin sieht wie folgt aus etwas:

d3.sankey = function() {

// Rest des Codes geht hier

}

So wie ich Verwenden Sie es in Javascript wie folgt:

d3.sankey(). nodeWidth (30). Größe ([100,100]);

Würde mich über jede Hilfe oder Anleitung freuen.

Danke!

Antwort

0

Sie müssen die Definition des d3 Typs erweitern, um die Methode sankey() und die von ihr akzeptierten Methoden einzuschließen.

Auf das absolute Minimum, müssen Sie das d3 Modul mit einer Deklarationsdatei verlängern deutlich zu machen, dass d3 hat sich mit dem d3-sankey Modul erweitert. Sie tun dies, indem eine Definitionsdatei erstellen, die Sie mit den folgenden Inhalten innerhalb des @types direkt vergeben:

declare module 'd3' { 
    export function sankey(...args[]) : any; 
} 

Dies sagt TS, dass es ein d3 Modul ist, und dass es exportiert die Funktion aufgeführt. Wenn das Modul d3 bereits vorhanden ist, wird dieses Modul erweitert.

So können Sie importieren Sie dann die d3 Service und verwenden es:

import dd3 = require('d3'); 
dd3.sankey(); 

Wenn Sie auf den Dateityp erweitern möchten, können Sie stattdessen die Definitionsdatei schreiben, wie so:

declare module 'd3' { 
    interface ISankey { 
     nodeWidth() : number; 
     nodeWidth(width : number|{(arg: number) : number}) : void; 
     // Add Other d3.sankey Methods Here 
    } 
    export function sankey() : ISankey;  
} 
+0

Ich habe versucht, die Datei mit der Deklaration erstellen und legte sie in meinem @ types-Verzeichnis zusammen mit anderen Definitionsdateien für d3, jquery etc. Es scheint jedoch, dass meine Anwendung die Definition nicht laden kann. d. h. es kann die Funktion sankey() nicht finden. Müssen die Dateien index.d.ts für d3 ebenfalls aktualisiert werden? Ich möchte das oder sankey.js nicht aktualisieren, da dies externe Dateien sind. Außerdem habe ich bemerkt, dass die anderen Typdefinitionsordner index.d.ts, package.json und types-metadata.json haben. Brauche ich eine ähnliche Struktur? – AgentHunt

+0

Nein; Diese anderen Dateien ('index.d.ts',' package.json' usw.) existieren, weil sie als npm-Module geliefert werden. Wie machst du es, wenn du d3 importierst? Ich habe festgestellt, dass wenn ich 'd3 = require ('d3') importiert habe;' es würde nicht aufgelöst werden, aber das Ändern der importierten Variablen in 'dd3' hat gut funktioniert. –

+0

Ich importierte die Art, wie Sie angegeben haben (dd3). Spielt es eine Rolle, wie ich die Datei nenne? Ich habe versucht, index.d.ts/sankey.d.ts. Ich bin mir nicht sicher, ob die Platzierung der Datei zählt. Ich habe es im Stammordner des @types-Ordners sowie im Ordner @types \ d3 abgelegt. Ich nehme an, solange der Dateiname mit 'd.ts' endet, sollte er geladen werden. Außerdem muss sankey.js im HTML-Code referenziert werden. richtig? – AgentHunt

2

Wie ein heads-up, ich habe gerade eine Pull Request #16051 zu DefinitelyTyped, die TS-Definitionen für d3-sankey enthält eingereicht.

Sobald sie zusammengeführt sind, werden sie gemäß Standardprozess zu npm/@ Typen veröffentlicht. I.e. npm install --save-dev @types/d3-sankey wird tun.

WICHTIG: Wenn ich sie schrieb, bemerkte ich, dass die aktuelle API-Dokumentation in der d3-sankey Repo in irgendeiner Notwendigkeit der Nachbesserung zu sein scheint (zB Methoden fehlt, von Zugriffsfunktionen zu nennen, die nicht verwendet werden in die Code-Basis)

Wenn ich eine Sekunde habe, werde ich ein Problem dort einreichen/PR einreichen.

UPDATE (2017.05.01):

Die "offizielle" Typoskript Definitionen für d3-sankey sind jetzt verfügbar (siehe npm @types/d3-sankey). Verwenden Sie sie einfach mit npm wie oben angegeben.

Die PR zum Aktualisieren der eigentlichen API-Dokumentation von d3-sankey, um den Quellcode widerzuspiegeln, wartet immer noch auf eine Zusammenführung here.

+0

Mit Hilfe von Follow-up, ich öffnete ein Problem re API doc [hier] (https://github.com/d3/d3-sankey/issues/22) – tomwanzek