Neden çalışmıyor
import * as MC from './MyClass';
Bu, ES6 / ES2015 tarzı importsözdizimidir. Bunun tam anlamı " Yüklenen modül ad alanı nesnesini al ./MyClassve yerel olarak kullan MC" şeklindedir. Özellikle, "modül ad alanı nesnesi " yalnızca özelliklere sahip düz bir nesneden oluşur. Bir ES6 modülü nesnesi bir işlev olarak veya ile çağrılamaz new.
Tekrar söylemek gerekirse: Bir ES6 modülü ad alanı nesnesi bir işlev olarak veya ile çağrılamaz new.
Bir modülden importkullandığınız şey * as Xsadece özelliklere sahip olacak şekilde tanımlanmıştır. Düşük seviyeli CommonJS'de buna tam olarak uyulmayabilir, ancak TypeScript size standart tarafından tanımlanan davranışın ne olduğunu söylüyor.
Ne işe yarar?
Bu modülü kullanmak için CommonJS tarzı içe aktarma sözdizimini kullanmanız gerekir:
import MC = require('./MyClass');
Her iki modülü de kontrol ediyorsanız, export defaultbunun yerine şunu kullanabilirsiniz :
Sınıfım.ts
export default class MyClass {
constructor() {
}
}
MyConsumer.ts
import MC from './MyClass';
Üzgünüm Bu; Kurallar Aptaldır.
ES6 içe aktarma sözdizimini kullanmak güzel olurdu, ama şimdi bunu yapmak zorunda import MC = require('./MyClass');mıyım? Çok 2013! Topal! Ancak keder, programlamanın normal bir parçasıdır. Lütfen Kübler-Ross modelinde beşinci aşamaya geçin: Kabul.
Buradaki TypeScript size bunun işe yaramadığını söylüyor çünkü işe yaramıyor. Orada (bir ekleme kesmek vardır namespaceiçin deklarasyon MyClassbu eserler taklit popüler bir yoldur) ve bunlar olabilir (örn toplaması) belirli downleveling modülü paketleyici bugün çalışır, ancak bu yanıltıcıdır. Henüz vahşi ortamda ES6 modülü uygulaması yok, ancak bu sonsuza kadar doğru olmayacak.
Gelecekteki halinizi hayal edin, yeni bir yerel ES6 modülü uygulamasında çalışmaya çalışın ve ES6'nın açıkça yapmadığı bir şeyi yapmak için ES6 sözdizimini kullanmaya çalışarak kendinizi büyük bir başarısızlığa hazırladığınızı görün .
Standart olmayan modül yükleyicimden yararlanmak istiyorum
Belki de defaultmevcut olmadığında dışa aktarımları "faydalı bir şekilde" oluşturan bir modül yükleyiciniz vardır. Demek istediğim, insanlar bir nedenden ötürü standartları belirler, ancak standartları göz ardı etmek bazen eğlencelidir ve bunun yapılacak harika bir şey olduğunu düşünebiliriz.
MyConsumer.ts'i şu şekilde değiştirin :
import A from './a';
Ve allowSyntheticDefaultImportskomut satırını veya tsconfig.jsonseçeneği belirtin .
allowSyntheticDefaultImportsKodunuzun çalışma zamanı davranışını hiç değiştirmediğini unutmayın . Bu, TypeScript'e modül yükleyicinizin defaulthiçbiri olmadığında dışa aktarmalar oluşturduğunu söyleyen bir bayraktır . Daha önce yapmadığı halde kodunuzun nodej'lerde çalışmasını sihirli bir şekilde yapmaz.
javascriptolarak kaldırıp ayrılmanızı öneririm . Soru yanlış olduğunu varsayar (TS özelliği) ile eşleştirilmiş olabilir iken, bu eşleştirilmiş olmalıdır . Temelde CJS / AMD'ye karşı ES6 modülü içe / dışa aktarımıdır.ecmascript-6typescriptexport =import ... fromimport =