2016-07-06 10 views
1

Derzeit versuche ich mit TypeScript JavaScript-Dateien zu erstellen, die dann in einer index.js-Datei benötigt werden. Ich benutze VS 2015 Update 3 mit node.js Tools 1.2 RC. Leider funktioniert es nicht so, wie ich dachte.Wie verwenden Sie mehrere kompilierte ts-Dateien in einem Knotenmodul?

mit hier ist meine erste Idee zu beginnen:

ich ein Knotenmodul haben (um genau zu sein, ist es ein deployd Modul http://docs.deployd.com/docs/using-modules/). Dieses Modul behandelt Zahlungsanbieter wie PayPal oder Stripe. Jetzt möchte ich mit TypeScript Schnittstellen, Klassen und Benutzertypen schreiben, um das Hinzufügen neuer Zahlungsanbieter zu erleichtern. Die alten .js-Dateien sollten immer noch da sein und verwendet werden. Ich möchte Schritt für Schritt migrieren und die selbstgeschriebenen und kompilierten .js-Dateien zusammen verwenden. Also dachte ich, ich kann .ts Dateien erstellen, meinen Code schreiben, speichern, VS auf js kompilieren lassen und die kompilierte js Datei in einer anderen js Datei benötigen. Okay, das ist meine Idee ... Nun ist das Problem

Ich habe eine PaymentProvider.ts Datei, die wie diese

import IPaymentProvider = require("./IPaymentProvider.ts"); // Interface, can't be realized in JavaScript, just TypeScript 

export abstract class PaymentProvider implements IPaymentProvider.IPaymentProvider 
{ 

    providerName: string; 
    productInternalId: number; 

    constructor(providerName : string) 
    { 
     this.providerName = providerName; 
    } 

    //... some methods 

}; 

Die andere Datei aussieht, ist PaypalPaymentProvider.ts

import PaymentProvider = require("./PaymentProvider.ts"); 
export class PaypalPaymentProvider extends PaymentProvider.PaymentProvider 
{ 

    constructor() 
    { 
     super("paypal"); 
    } 
    // more methods 
} 

VS 2015 zeigt keine Fehler an. Die Dateien js und .js.map werden generiert. Jetzt dachte ich, ich könnte die Dateien benötigen und das war's. Ich habe versucht, die PaypalPaymentProvider.js wie diese zu verwenden const PaypalPaymentProvider = erfordern ("./Lib/payment-provider/PaypalPaymentProvider.js"); (ja, es befindet sich dort), aber es funktioniert nicht. Beim Start von index.js über den Knoten bekomme ich folgende Fehlermeldung:

... \ Path \ PaymentProvider.ts: 1 (Funktion (exports, require, Modul, __Dateiname, __Dateiname) {import IPaymentProvider = require (". /IPaymentProvider.ts "); unerwarteter Token Import ....

ich finde es seltsam, dass dies der Fehler ist, weil JavaScript doesnt't Interfaces hat die kompilierte IPaymentProvider.js leer auch dachte ich, dass Typoskript.. ist hauptsächlich für die Entwicklung und das kompilierte JavaScript für die Produktion.Ausserdem warum es eine ts-Datei benötigt? Ich dachte, Importe in Typoskript werden konvertiert, um von der kompilierten js-Datei zu verlangen? Muss ich alle kompilierten js-Dateien benötigen und nicht nur die, die ich derzeit versuche zu verwenden? (Ich t nicht hink so ...)

Um ehrlich zu sein, ich denke, das Hauptproblem ist, dass ich neu in TypeScript bin und etwas falsch von Anfang an machen.

Irgendwelche Hilfe/Beratung? Vielen Dank!

+0

Sie müssen eine Deklarationsdatei 'index.d.ts' veröffentlichen. Vielleicht dieser [Artikel] (https: // medium.com/@ mweststrate/how-to-create-strong-typed-npm-modules-1e1bda23a7f4) kann zusätzlich zur [offiziellen Dokumentation] (https://www.typescriptlang.org/docs/handbook/typings-for- npm-packages.html). – Paleo

+0

Muss ich wirklich eine Deklarationsdatei veröffentlichen? Der Artikel, den Sie verlinkt haben, spricht davon, ein Typoskript-Modul in einem anderen Modul zu verwenden. Aber ich möchte Typoskript-kompilierte Javascript-Dateien im selben Knotenmodul verwenden. Das Knotenmodul verfügt über eine index.js-Datei und einige * .ts-Dateien, die zu * .js-Dateien kompiliert werden. Diese kompilierten Dateien werden in der Datei index.js benötigt. – Hamburml

+0

Mein schlechtes. Ich habe dein Problem missverstanden. Eigentlich verstehe ich nicht, was du machen willst. – Paleo

Antwort

0

Ich habe die Lösung ... Dank Paelos Links konnte ich sehen, dass ich das Dateiende weglassen muss! Also die wirklich einfache Lösung war zu schreiben

import IPaymentProvider = erfordern ("./IPaymentProvider");

anstelle von

import IPaymentProvider = erfordern ("./ IPaymentProvider.ts");

Als ich das in jeder ts Datei änderte, funktionierte es perfekt!

Verwandte Themen