Extended - untuk memberikan rincian lebih lanjut berdasarkan beberapa komentar
Kesalahannya
Kesalahan TS2306: File 'test.ts' bukan modul.
Berasal dari fakta yang dijelaskan di sini http://exploringjs.com/es6/ch_modules.html
17. Modul
Bab ini menjelaskan cara kerja modul built-in di ECMAScript 6.
17.1 Ikhtisar
Dalam ECMAScript 6, modul disimpan dalam file. Hanya ada satu modul per file dan satu file per modul. Anda memiliki dua cara mengekspor barang dari modul. Dua cara ini bisa dicampur, tetapi biasanya lebih baik menggunakannya secara terpisah.
17.1.1 Beberapa ekspor bernama
Mungkin ada beberapa ekspor bernama:
//------ 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 Ekspor standar tunggal
Mungkin ada satu ekspor standar. Misalnya, suatu fungsi:
//------ myFunc.js ------
export default function () { ··· } // no semicolon!
Berdasarkan hal di atas kita perlu export
, sebagai bagian dari file test.js. Mari sesuaikan kontennya seperti ini:
// test.js - exporting es6
export module App {
export class SomeClass {
getName(): string {
return 'name';
}
}
export class OtherClass {
getName(): string {
return 'name';
}
}
}
Dan sekarang kita dapat mengimpornya dengan tiga cara berikut:
import * as app1 from "./test";
import app2 = require("./test");
import {App} from "./test";
Dan kita dapat mengkonsumsi barang impor seperti ini:
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();
dan panggil metode untuk melihatnya beraksi:
console.log(a1.getName())
console.log(a2.getName())
console.log(b1.getName())
console.log(b2.getName())
console.log(c1.getName())
console.log(c2.getName())
Bagian asli berusaha membantu mengurangi jumlah kompleksitas dalam penggunaan namespace
Bagian asli:
Saya akan sangat menyarankan untuk memeriksa T & J ini:
Biarkan saya mengutip kalimat pertama:
Jangan gunakan "ruang nama" dalam modul eksternal.
Jangan lakukan ini.
Serius. Berhenti.
...
Dalam hal ini, kita tidak perlu module
masuk test.ts
. Ini bisa jadi konten yang disesuaikan test.ts
:
export class SomeClass
{
getName(): string
{
return 'name';
}
}
Baca lebih lanjut di sini
Pada contoh sebelumnya, ketika kami mengonsumsi setiap validator, setiap modul hanya mengekspor satu nilai. Dalam kasus seperti ini, sulit untuk bekerja dengan simbol-simbol ini melalui nama mereka yang memenuhi syarat ketika pengidentifikasi tunggal akan melakukan hal yang sama baiknya.
The export =
sintaks menentukan satu objek yang diekspor dari modul . Ini bisa berupa kelas, antarmuka, modul, fungsi, atau enum. Saat diimpor, simbol yang diekspor dikonsumsi langsung dan tidak memenuhi syarat dengan nama apa pun.
nanti kita bisa mengkonsumsinya seperti ini:
import App = require('./test');
var sc: App.SomeClass = new App.SomeClass();
sc.getName();
Baca lebih lanjut di sini:
Dalam beberapa kasus, Anda mungkin hanya ingin memuat modul dalam beberapa kondisi. Dalam TypeScript, kita dapat menggunakan pola yang ditunjukkan di bawah ini untuk menerapkan ini dan skenario pemuatan lanjutan lainnya untuk secara langsung memanggil pemuat modul tanpa kehilangan keamanan jenis.
Kompiler mendeteksi apakah setiap modul digunakan dalam JavaScript yang dipancarkan. Untuk modul yang hanya digunakan sebagai bagian dari sistem tipe, tidak ada panggilan yang diperlukan yang dipancarkan. Pemusnahan referensi yang tidak digunakan ini adalah optimalisasi kinerja yang baik, dan juga memungkinkan pemuatan opsional modul-modul tersebut.
Gagasan inti dari pola adalah bahwa impor id = memerlukan ('...') pernyataan memberi kita akses ke jenis yang diekspos oleh modul eksternal. Pemuat modul dipanggil (melalui keharusan) secara dinamis, seperti yang ditunjukkan pada blok if di bawah ini. Ini memanfaatkan optimisasi pemusnahan referensi sehingga modul hanya dimuat saat dibutuhkan. Agar pola ini berfungsi, penting bahwa simbol yang ditentukan melalui impor hanya digunakan dalam posisi jenis (yaitu tidak pernah dalam posisi yang akan dipancarkan ke JavaScript).