Genişletilmiş - bazı yorumlara dayalı olarak daha fazla ayrıntı sağlamak için
Hata
Hata TS2306: 'test.ts' dosyası bir modül değil.
Burada http://exploringjs.com/es6/ch_modules.html açıklanan olgudan gelmektedir.
17. Modüller
Bu bölüm yerleşik modüllerin ECMAScript 6'da nasıl çalıştığını açıklar.
17.1 Genel Bakış
ECMAScript 6'da modüller dosyalarda saklanır. Dosya başına tam olarak bir modül ve modül başına bir dosya vardır. Bir modülden bir şeyleri dışa aktarmanın iki yolu var. Bu iki yol karıştırılabilir, ancak genellikle ayrı ayrı kullanmak daha iyidir.
17.1.1 Birden çok adlandırılmış dışa aktarma
Birden çok adlandırılmış dışa aktarma olabilir:
//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
...
17.1.2 Tek varsayılan dışa aktarma
Tek bir varsayılan dışa aktarma olabilir. Örneğin, bir işlev:
//------ myFunc.js ------
export default function () { ··· } // no semicolon!
Yukarıdakilere dayanarak export, test.js dosyasının bir parçası olarak ihtiyacımız var . İçeriğini şu şekilde ayarlayalım:
// test.js - exporting es6
export module App {
export class SomeClass {
getName(): string {
return 'name';
}
}
export class OtherClass {
getName(): string {
return 'name';
}
}
}
Ve şimdi onu şu üç yolla içe aktarabiliriz:
import * as app1 from "./test";
import app2 = require("./test");
import {App} from "./test";
Ve şu şekilde ithal edilen şeyleri tüketebiliriz:
var a1: app1.App.SomeClass = new app1.App.SomeClass();
var a2: app1.App.OtherClass = new app1.App.OtherClass();
var b1: app2.App.SomeClass = new app2.App.SomeClass();
var b2: app2.App.OtherClass = new app2.App.OtherClass();
var c1: App.SomeClass = new App.SomeClass();
var c2: App.OtherClass = new App.OtherClass();
ve eylem halinde görmek için yöntemi çağırın:
console.log(a1.getName())
console.log(a2.getName())
console.log(b1.getName())
console.log(b2.getName())
console.log(c1.getName())
console.log(c2.getName())
Orijinal kısım, ad alanının kullanımındaki karmaşıklık miktarını azaltmaya yardımcı olmaya çalışıyor
Orijinal bölüm:
Bu soru ve cevapları kontrol etmenizi şiddetle öneririm:
İlk cümleyi aktarmama izin verin:
Harici modüllerde "ad alanları" kullanmayın.
Bunu yapma.
Ciddi anlamda. Dur.
...
Bu durumda sadece moduleiçine ihtiyacımız yok test.ts. Bu, ayarlanan içeriği olabilir test.ts:
export class SomeClass
{
getName(): string
{
return 'name';
}
}
Daha fazlasını buradan okuyun
Önceki örnekte, her doğrulayıcıyı tükettiğimizde, her modül yalnızca bir değer dışa aktarıyordu. Bu gibi durumlarda, tek bir tanımlayıcı da işe yarayacaksa, bu sembollerle nitelikli isimleriyle çalışmak zahmetlidir.
export =Söz dizimi belirtir modülden dışa tek bir nesne . Bu bir sınıf, arabirim, modül, işlev veya enum olabilir. İçe aktarıldığında, dışa aktarılan sembol doğrudan tüketilir ve herhangi bir adla nitelenmez.
daha sonra şu şekilde tüketebiliriz:
import App = require('./test');
var sc: App.SomeClass = new App.SomeClass();
sc.getName();
Daha fazlasını buradan okuyun:
Bazı durumlarda, yalnızca bazı koşullar altında bir modül yüklemek isteyebilirsiniz. TypeScript'te, tip güvenliğini kaybetmeden modül yükleyicileri doğrudan çağırmak için bunu ve diğer gelişmiş yükleme senaryolarını uygulamak için aşağıda gösterilen modeli kullanabiliriz.
Derleyici, her modülün yayınlanan JavaScript'te kullanılıp kullanılmadığını algılar. Sadece tip sistemin bir parçası olarak kullanılan modüller için, herhangi bir gerekli çağrı verilmez. Kullanılmayan referansların bu şekilde ayrılması, iyi bir performans optimizasyonudur ve bu modüllerin isteğe bağlı olarak yüklenmesine de izin verir.
Modelin ana fikri, import id = require ('...') ifadesinin bize harici modül tarafından sunulan tiplere erişim sağlamasıdır. Modül yükleyici, aşağıdaki if bloklarında gösterildiği gibi dinamik olarak çağrılır (zorunlu olarak). Bu, referans ayırma optimizasyonundan yararlanır, böylece modül yalnızca ihtiyaç duyulduğunda yüklenir. Bu kalıbın çalışması için, içe aktarma yoluyla tanımlanan sembolün yalnızca tür konumlarında kullanılması (yani asla JavaScript'e gönderilecek bir konumda olmaması) önemlidir.