2013-01-23 27 views
8

Tamam, gördüğünüz gibi projenizdeki iç modülleri kullanmak istiyorsunuz. Peki, TypeScript 0.8.1.1'de bir geçici çözüm vardı, dışa aktarılmayan modülü (iç) tanımlayabilir ve üstündeki ithalatı ekleyebilirsiniz. 0.8.2'de, bu artık işe yaramıyor gibi görünüyor. Burada gördüğüm tek seçenek, ithalat sözdizimini tamamen atlamak ve düğüm modülleri için standart gereksinimi kullanmak olacaktır. Bunun iyi bir fikir olup olmadığını bilmiyorum ama lütfen fikirlerinizi paylaşın. Ben ithalat sözdizimi kullanarak modül harici (dil belirtimi) yapacak, ancak bu 0.8.1.1 doğru değildi, belki hata biliyor musunuz?TypeScript 0.8.2 İç modüllerde Node.js modüllerini içe aktarma

bu çalıştı ve artık 0.8.2 çalışmaz typescript 0.8.1.1 yılında

:

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

ararım diğer dahili modüllerde dosyasının en üstünde referans sözdizimi kullanılarak kodunun üzerinde de dahil olmak üzere dosyaya başvurmak ve normalde olabilir :

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

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

o 0.8.2 bu iç modülleri için neyin işe yaradığını tek yol gibi görünüyor

İç modülleri Node.js modülleriyle karıştırmanın başka bir yolu var mı? Yukarıdaki kullanımda yanlış bir şey mi var (kullanımı derler ve çalışır ...)?

cevap

4

O typescript 0.8.2 yakın şartname götürüyor bizi düşünüyorum.

sözdizimi:

import x = module('SomeModule'); 

özellikle typescript Dil Şartnamede bir ExternalModuleReference mi.

Bir iç modül kullanılarak ithal olurdu:

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

Ama bir iç modülü ithal size JavaScript'inizin bir require açıklama oluşturmaz.

TypeScript Language Teknik Özellikleri 0.8 - 9.2 'den alınmıştır.2 Alma Tanımlamalar

ImportDeclaration:

import Identifier = ModuleReference ; 

ModuleReference:

ExternalModuleReference 
ModuleName 

ExternalModuleReference:

module (StringLiteral) 
+0

Tamam, iç modüllerimi Node.js commonjs modülleriyle karıştırmak mümkün mü? İç modülüme x = modül (...) import eklediğimde, harici olarak kabul edilir. – jzvelc

+0

Dıştan yapılabilir mi? Sadece TypeScript'te bir gereksinim kullanmakla ilgili sorun, size değişken üzerindeki tip bilgilerini vermeyecek olmasıdır. – Fenton

+0

Evet Biliyorum, ancak içe aktarma yoluyla modülleri yüklemek çok zahmetli çünkü TypeScript dosyalarına tam yollar vermem gerekiyor ... Bunun için herhangi bir geçici çözüm var mı? – jzvelc

0

Tamam, bu hata, TypeScript sürümünden kaynaklanmaktadır. Typescript 0.8.1.1 yılında sözdizimi olmak zorunda harici modülü almak için: Bu tutanak en son sürümünde tanımlanan bir hata olduğunu

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

, önceki sürüme dönmek veya bunu yapmak için sözdizimi değiştirebilir v0.8.1.1 ile uyumludur. Bunun bir hata olduğunu ve gelecek sürümlerde orijinal sözdizimini kullanabilmeniz gerektiğini unutmayın.

Bu, bu hata için resmi iplik: http://typescript.codeplex.com/discussions/405800

+0

bir Ben yazdım, 0.8.1.1 ithalat iyi çalıştı ama 0.8.2'de tüm modül başka bir iç modülde artık mevcut değil. Sanırım bu doğru davranış (içe aktarmayı kullanarak modülü harici yapar) ve gelecek sürümlerde mevcut olacak mı? – jzvelc