2016-07-02 10 views
19

ithal tüm dosyaları. Önceden tüm sınıflarım için dışa aktarma modülü XXX (dışa aktarma adı XXX olarak yeniden adlandırıldı) kullanıldı, ancak kitapların söylediği gibi, bu önerilen bir yöntem değil, içe aktarma kullanmalıyım. typescript 1.8 modülleri: Ben 100 gibi ayrı ts dosyaları ile typescript ile büyük kütüphane oluşturma çabası klasörden

Yani ithal çalıştı.

import * as mylib from "./source/source.ts"; 

Ama 100 dosya var, ben hepsi için böyle bir satır eklemek istemiyorum: Bu iyi çalıştı. Ve ben bütün sınıfları myLib değişken üzerinden erişilebilir olmasını istiyorum.

Yani bu çalıştı:

import * as mylib from "./source/"; 

Ama bunu en kısa sürede, alıyorum: modül './source/' bulunamıyor

tüm aktarmak için bir yol var mı Tek bir satırda birden çok dosya içeren bir klasörden sınıflar? tsc sağlar

cevap

28

modül çözüm stratejileri Hem böyle bir davranışı desteklemez.

1. (does package.json have a typings key? If so, import this file) 
2. import * as mylib from "./source/index.ts"; 
3. import * as mylib from "./source/index.tsx"; 
4. import * as mylib from "./source/index.d.ts"; 

Burada düğüm tarzı modülü çözünürlüğünü kullandığınız farz ediyorum, muhtemelen beri şunlardır: Ne istediğiniz ithalat beyanı

import * as mylib from "./source/"; 

aslında yapıyor bu sırada kontrolleri yapmaktır önerilen yol bu. Modül çözünürlük typescript yapılır konusunda daha ayrıntılı bilgi için typescript docs edin.

Genellikle, yapmaya çalıştığınız şey, modüllerin geri kalanını dışa aktardığınız giriş noktası olarak işlev gören bir index.d.ts dosyası oluşturmaktır. Ben örnek olarak angular2 kullanıyorum: Sizin ortak angular2 ithalat şuna benzer:

import { Injectable } from '@angular/core' 

core sadece @angular dizinde içinde yaşayan bir dizindir. Sadece source dizininiz gibi. Ancak, çekirdek dizinde, bir index.d.ts dosyada bulunur:

/** 
* @module 
* @description 
* Starting point to import all public core APIs. 
*/ 
export * from './src/metadata'; 
export * from './src/util'; 
export * from './src/di'; 
.... 
+0

Bu işe yaradı! Bu yaklaşımı uygulamaya başladım ve başka bir soruyla karşılaştım: http://stackoverflow.com/questions/38168733/typescript-export-all-functions-in-a-namespace belki de cevabı da biliyorsunuz :) – zeroin

+1

Ve başka bir ilgili soru - kendi proje içinde, bütün sınıfları alabilir bir yerine benim sınıfta kullanmak olanlar teker ithal (belki index.d.ts kullanarak?)? Yoksa bu yanlış bir fikir mi? – zeroin

+0

Webpack/browserify komut dosyası yükleyicinizin farklı yapılandırmalar için kesin kaynak sınırlarını algılayamadığı için bunun iyi bir fikir olmadığını düşünüyorum. Örneğin, yönetici modülü ve bağımlılıkları, genel web sitesi ve bağımlılıkları. Her zaman özel kaynak sayfaları için kullanılmayacak olsa bile tüm kaynakları indireceksiniz. – VadimB