Mở rộng - để cung cấp thêm chi tiết dựa trên một số ý kiến
Lỗi
Lỗi TS2306: Tệp 'test.ts' không phải là mô-đun.
Đến từ thực tế được mô tả ở đây http://exploringjs.com/es6/ch_modules.html
17. Mô-đun
Chương này giải thích cách các mô-đun tích hợp hoạt động trong ECMAScript 6.
17.1 Tổng quan
Trong ECMAScript 6, các mô-đun được lưu trữ trong các tệp. Có chính xác một mô-đun cho mỗi tệp và một tệp cho mỗi mô-đun. Bạn có hai cách xuất những thứ từ một mô-đun. Hai cách này có thể được trộn lẫn, nhưng thường tốt hơn là sử dụng chúng một cách riêng biệt.
17.1.1 Xuất khẩu nhiều tên
Có thể có nhiều xuất khẩu được đặt tên:
//------ 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 Xuất mặc định đơn
Có thể có một xuất mặc định duy nhất. Ví dụ: một hàm:
//------ myFunc.js ------
export default function () { ··· } // no semicolon!
Dựa trên những điều trên, chúng ta cần export
, như là một phần của tệp test.js. Hãy điều chỉnh nội dung của nó như thế này:
// test.js - exporting es6
export module App {
export class SomeClass {
getName(): string {
return 'name';
}
}
export class OtherClass {
getName(): string {
return 'name';
}
}
}
Và bây giờ chúng ta có thể nhập nó với những cách này:
import * as app1 from "./test";
import app2 = require("./test");
import {App} from "./test";
Và chúng ta có thể tiêu thụ những thứ nhập khẩu như thế này:
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();
và gọi phương thức để xem nó hoạt động:
console.log(a1.getName())
console.log(a2.getName())
console.log(b1.getName())
console.log(b2.getName())
console.log(c1.getName())
console.log(c2.getName())
Phần gốc đang cố gắng giúp giảm mức độ phức tạp trong việc sử dụng không gian tên
Phần gốc:
Tôi thực sự rất muốn đề nghị kiểm tra Q & A này:
Hãy để tôi trích dẫn câu đầu tiên:
Không sử dụng "không gian tên" trong các mô-đun bên ngoài.
Đừng làm điều này.
Nghiêm túc. Dừng lại.
...
Trong trường hợp này, chúng tôi không cần module
bên trong test.ts
. Đây có thể là nội dung của nó được điều chỉnh test.ts
:
export class SomeClass
{
getName(): string
{
return 'name';
}
}
Đọc thêm tại đây
Trong ví dụ trước, khi chúng ta tiêu thụ từng trình xác nhận, mỗi mô-đun chỉ xuất một giá trị. Trong những trường hợp như thế này, thật khó để làm việc với các biểu tượng này thông qua tên đủ điều kiện của chúng khi một định danh duy nhất cũng sẽ làm như vậy.
Các export =
cú pháp quy định cụ thể một đối tượng duy nhất được xuất khẩu từ các mô-đun . Đây có thể là một lớp, giao diện, mô-đun, chức năng hoặc enum. Khi được nhập, biểu tượng đã xuất được tiêu thụ trực tiếp và không đủ điều kiện theo bất kỳ tên nào.
sau này chúng ta có thể tiêu thụ nó như thế này:
import App = require('./test');
var sc: App.SomeClass = new App.SomeClass();
sc.getName();
Đọc thêm tại đây:
Trong một số trường hợp, bạn có thể chỉ muốn tải một mô-đun trong một số điều kiện. Trong TypeScript, chúng ta có thể sử dụng mẫu được hiển thị bên dưới để thực hiện điều này và các tình huống tải nâng cao khác để gọi trực tiếp các trình tải mô-đun mà không làm mất an toàn kiểu.
Trình biên dịch phát hiện xem mỗi mô-đun được sử dụng trong JavaScript được phát ra. Đối với các mô-đun chỉ được sử dụng như một phần của hệ thống loại, không có cuộc gọi yêu cầu nào được phát ra. Việc loại bỏ các tài liệu tham khảo không sử dụng này là một tối ưu hóa hiệu suất tốt và cũng cho phép tải tùy chọn các mô-đun đó.
Ý tưởng cốt lõi của mẫu là câu lệnh import id = quiries ('...') cho phép chúng ta truy cập vào các loại được hiển thị bởi mô-đun bên ngoài. Trình tải mô-đun được gọi (thông qua yêu cầu) một cách linh hoạt, như thể hiện trong các khối if bên dưới. Điều này thúc đẩy tối ưu hóa loại bỏ tham chiếu để mô-đun chỉ được tải khi cần thiết. Để mẫu này hoạt động, điều quan trọng là biểu tượng được xác định thông qua nhập chỉ được sử dụng ở các vị trí loại (nghĩa là không bao giờ ở vị trí sẽ được phát ra trong JavaScript).