2013-01-23 6 views
8

Okay, wie ich sehen kann, möchten Sie interne Module in Ihrem Projekt verwenden. Nun, es gab eine Problemumgehung in TypeScript 0.8.1.1, Sie könnten nicht exportierte Module (intern) definieren und darüber hinaus Importe hinzufügen. In 0.8.2 scheint das nicht mehr zu funktionieren. Die einzige Option, die ich hier sehen würde, wäre, die Importsyntax komplett wegzulassen und die Standardanforderungen für Knotenmodule zu verwenden. Ich weiß nicht, ob das eine gute Idee ist, aber bitte, teile deine Meinung. Ich weiß, dass die Verwendung der Importsyntax das Modul extern machen wird (Sprachspezifikation), aber das war in 0.8.1.1 nicht wahr, vielleicht ein Fehler?TypeScript 0.8.2 Node.js Module in interne Module importieren

In Typoskript 0.8.1.1 dies funktionierte und funktioniert nicht mehr in 0.8.2:

import path = module('path'); 
import fs = module('fs'); 
module SomeNamespace.Controller { 
    export class Index { 
     ... 
    } 
} 

I-Datei mit obigem Code mit Referenz-Syntax auf der Datei in anderen internen Module verweisen konnte und in der Regel rufen :

var ctrl = new SomeNamespace.Controller.Index; 
ctrl.index(); 

es scheint in 0.8.2 dies der einzige Weg, das ist, was es für die interne Module funktioniert:

var path = require('path'); 
var fs = require('fs'); 
module SomeNamespace.Controller { 
    export class Index { 
     ... 
    } 
} 

Gibt es noch andere Möglichkeiten, interne Module mit Node.js-Modulen zu mischen? Ist etwas falsch mit der oben genannten Verwendung (es kompiliert und läuft in Ordnung ...)?

Antwort

4

Ich denke, dass Typoskript 0.8.2 bringt uns näher an der Spezifikation.

Die Syntax:

import x = module('SomeModule'); 

ist speziell ein ExternalModuleReference im Typoskript Language Specification.

///<reference path="SomeModule.ts" /> 
import x = SomeModule; 

Aber Import ein internes Modul werden Sie keine require Anweisung in JavaScript generieren:

Ein internes Modul würde mit importiert werden.

Aus der TypeScript-Sprachspezifikation 0.8 - 9.2.2 Einfuhranmeldungen

ImportDeclaration:

import Identifier = ModuleReference ; 

Modulreferenz:

ExternalModuleReference 
ModuleName 

ExternalModuleReference:

module (StringLiteral) 
+0

Okay, ist es irgendwie möglich, meine internen Module mit Node.js commonjs Modulen zu mischen? Sobald ich meinem internen Modul import x = modul (...) hinzufüge, wird es als externes Modul behandelt. – jzvelc

+0

Können sie extern gemacht werden? Das Problem bei der Verwendung von require in TypeScript besteht darin, dass Sie nicht die Typinformationen für die Variable erhalten. – Fenton

+0

Ja, ich weiß, aber es ist sehr unpraktisch, Module über die import-Anweisung zu laden, weil ich die vollständigen Pfade zu den TypeScript-Dateien bereitstellen muss ... Irgendeine Lösung? – jzvelc

0

Ok, dieser Fehler ist auf die Version des TypeScript zurückzuführen.

export import <moduleName> = module(“<path>”); 

Dies ist ein Fehler in der neuesten Version von Typoskript identifiziert ist, können Sie auf die vorherige Version zurückzugeben oder die Syntax zu machen ändern: In Typoskript 0.8.1.1 ein externes Modul die Syntax sein muss, importieren kompatibel mit v0.8.1.1. Bedenken Sie, dass dies ein Bug ist und dass Sie in zukünftigen Versionen die ursprüngliche Syntax verwenden können.

Dies ist die offizielle Thread für diesen Fehler: http://typescript.codeplex.com/discussions/405800

+0

A s Ich habe geschrieben, in 0.8.1.1 Import funktionierte gut, aber in 0.8.2 ist das gesamte Modul nicht mehr verfügbar in einem anderen internen Modul. Ich denke, das ist das richtige Verhalten (mit Import macht Modul extern) und wird in zukünftigen Versionen vorhanden sein? – jzvelc