Neden çalışmıyor
import * as MC from './MyClass';
Bu, ES6 / ES2015 tarzı import
sözdizimidir. Bunun tam anlamı " Yüklenen modül ad alanı nesnesini al ./MyClass
ve 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 import
kullandığınız şey * as X
sadece ö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 default
bunun 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 namespace
için deklarasyon MyClass
bu 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 default
mevcut 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 allowSyntheticDefaultImports
komut satırını veya tsconfig.json
seçeneği belirtin .
allowSyntheticDefaultImports
Kodunuzun çalışma zamanı davranışını hiç değiştirmediğini unutmayın . Bu, TypeScript'e modül yükleyicinizin default
hiç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.
javascript
olarak 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-6
typescript
export =
import ... from
import =