2017-02-17 2 views
0

https://github.com/mgumerov/angular"Die Datei ist kein Modul" auf js Moduldeklaration

Bitte haben Sie einen Blick auf src/Mock-data/Mock-data.js - es ist groß, aber sehr einfach.

System.register([], function (exports) { 
    mockdata = {......}; 
    exports("MockData", mockdata); 
}); 

wählte ich es in meinem TS Modul src/app/table-view.ts zu konsumieren:

import { MockData } from 'mockdata/mock-data'; 

aber TSC gab mir eine Fehlermeldung, da eine JS-Modul führt implizit ‚Importieren jeder 'object, es sei denn, das Modul verfügt über eine TS-typisierte Deklaration. Und wie der Schnellstart von Angular 2 nahelegt, werden "implizite Any" als Fehler behandelt.

Mein erster Impuls war es, require() stattdessen das Modul zu importieren, wie einige Quellen vorschlagen. Dies führt jedoch zu einem Fehler "Name kann nicht gefunden werden: require".

In Ordnung, lassen Sie uns eine Erklärung liefern: src/Mock-data/Mock-data.d.ts

declare module 'MockData' { 
    var mockdata: any; 
    export = mockdata; 
} 

Es sieht perfekt wie andere ähnliche Erklärungen (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/adal/index.d.ts), außer natürlich sehr einfach es ist, weil Ich deklariere nur ein einziges untypisiertes Objekt. Und vielleicht mache ich das auch nicht richtig, aber das ist nicht die ganze Geschichte! Problem ist, TSC sagt jetzt TS2306: Datei ... mock-data.d.ts ist kein Modul! Und selbst wenn ich versuchte, die Datei durch die zuvor erwähnte zu ersetzen (von DefinitelyTyped), blieb die Nachricht gleich. Was ist los?

Und wo soll ich eine richtige Erklärung finden, wie man ein JS-Modul in TS konsumiert? Ein Modul ohne Klassen, keine Schnittstellen, nur ein einzelnes Objekt? Hier

+0

Was bedeutet "konsumieren" in diesem Zusammenhang? – evolutionxbox

+0

Nun, ich versuche, ein Objekt aus dem Modul zu importieren und dann ein Stück Daten aus den Eigenschaften dieses Objekts in ein neu erstelltes Array typisierter Objekte zu extrahieren. Zweifellos hätte ich es anders machen können, zum Beispiel ein JSON zu lesen, aber ich möchte wissen, warum meine derzeitige Vorgehensweise nicht funktioniert. –

Antwort

0

ist die richtige Erklärung:

export const MockData: any; 

Das ist die ganz Mock-data.d.ts Die MockData hier ist die Kennung, unter der die Ausfuhr in meiner Mock-data.js gemacht

Dies ist aus https://www.typescriptlang.org/docs/handbook/modules.html entwickelt - leider ist der Hinweis in einem Abschnitt "UMD-Module" versteckt, denn in anderen Beispielen gibt es das "deklarieren", was in meinem Fall nicht benötigt wird.

Verwandte Themen