2012-11-17 45 views
7

Apparently, bạn có thể nói 'export import xx = module ("xx")' trong TypeScript.TypeScript - 'nhập khẩu' là gì?

Nhưng điều đó có nghĩa là gì? Tôi không thấy điều đó trong spec.

+3

Câu hỏi này liên quan đến cú pháp đã bị xóa khỏi TypeScript khoảng 4 năm trước. –

Trả lời

9

Quan sát tốt.

Đây là kỹ thuật tổng hợp làm cho toàn bộ mô-đun được nhập hoạt động như mô-đun bên ngoài được tạo trong mô-đun kèm theo. Dưới đây là ví dụ được rút gọn:

module MyModule { 
    export class MyClass { 
     doSomething() { 

     } 
    } 
} 

declare module EnclosingModule { 
    export import x = module(MyModule); 
} 

var y = new EnclosingModule.x.MyClass(); 

Từ khóa xuất của riêng nó làm cho mô đun trở thành mô-đun bên ngoài. Trong trường hợp này, nó đang tạo ra MyModule mô-đun bên ngoài của mô-đun kèm theo mặc dù ban đầu nó không được định nghĩa bên trong mô-đun kèm theo.

Tại sao?

Tôi đoán đây là cách tiện dụng để sử dụng lại các mô-đun thay vì lặp lại chúng trong các ngữ cảnh khác nhau - làm cho chúng có thể truy cập ở nhiều nơi có vẻ hợp lý.

+0

Tuyệt vời, cảm ơn! –

+1

Điều thú vị là phần 9.2.2 của trạng thái thông số "Không thể xuất định danh mô-đun được khai báo trong khai báo nhập khẩu." Trừ khi tôi nhận được thuật ngữ của tôi sai, không phải là những gì chúng tôi đang làm ở trên? – Crwth

+1

Nó không làm việc ra khỏi hộp như thế này - nhưng bạn có thể sử dụng nó trong định nghĩa. tức là 'khai báo mô-đun SomeModule {export import stuff = module (" stuff "); } ' – Fenton

4

Kể từ 0.8.1.1, bạn dường như cần sử dụng cú pháp này khi bạn xuất các lớp mở rộng các lớp được khai báo trong các mô-đun khác.

Ví dụ, trong 0.8.1, bạn có thể nói điều này:

import mUiBase = module("../UiBase"); 

export class BaseViewModel extends mUiBase.UiBase { 
} 

Nhưng trong 0.8.1.1, cung cấp cho bạn một lỗi "class xuất khẩu mở rộng lớp từ mô-đun riêng", vì vậy bạn cần phải làm thay vào đó:

export import mUiBase = module("../UiBase"); 

export class BaseViewModel extends mUiBase.UiBase { 
} 

Có lẽ đó là dự định chứ không phải chỉ là lỗi.

+1

Sự hiểu biết của tôi từ các cuộc thảo luận trên CodePlex (không thể tìm thấy liên kết tại thời điểm này ...) là đây là một lỗi, và xuất nhập khẩu là một giải pháp tạm thời. – JcFx

+0

Tôi đã sử dụng 0.8.1.1 ... Chỉ cần nâng cấp lên 0.8.3 và tất cả "xuất nhập" của tôi hiện là lỗi (có thể chỉ cần xóa xuất). Vì vậy, JcFx đã đúng về nó là một lỗi. Kỳ lạ là Steve đã mô tả một cách sử dụng thực sự cho điều này, điều gì với điều đó bây giờ? – parliament

Các vấn đề liên quan