2012-10-19 30 views
8

Nếu tôi tham chiếu tệp khai báo TypeScript (ví dụ: jquery.d.ts) bằng cách sử dụng cú pháp /// <reference path="..."/>, tùy thuộc vào tôi để đảm bảo tôi tải thư viện tương ứng theo một số phương tiện khác , tức là chỉ tham chiếu tệp .d.ts không tải thư viện.Sử dụng nhập/yêu cầu trong TypeScript để nhận khai báo giao diện

Có cách nào để tạo TypeScript tạo cuộc gọi require() cho thư viện khi tôi sử dụng không? Nếu tôi không sử dụng AMD/requirejs tôi chỉ có thể gọi require theo cách thủ công, nhưng tôi muốn làm việc này với AMD.

Lợi thế của việc này là các phụ thuộc của tôi sẽ không được xác định ở hai nơi. Việc tham chiếu thư viện từ tệp .ts sẽ đủ để đảm bảo nó tải, thay vì phải duy trì danh sách phụ thuộc theo cách thủ công trong HTML của tôi.

Cập nhật: Tôi đã mở new question làm rõ tình hình chính xác của mình. Tôi muốn trả tiền cho câu trả lời cho câu hỏi ban đầu của mình vì tôi không đưa ra tất cả các chi tiết cần thiết.

Trả lời

6

Có, TypeScript hỗ trợ các mô-đun "bên ngoài", về cơ bản là các mô-đun AMD hoặc CommonJS lớp cơ bản. Ví dụ:

MyLib.ts

export function foo() { return 'bar' } 

MyProj.ts

import lib = module('./MyLib.ts') 
lib.foo(); // returns bar 

Biên dịch này với "amd --module" và bạn sẽ nhận được các mô-đun thích hợp và yêu cầu cú pháp tạo ra cho bạn .

+1

Mô-đun hoạt động tốt cho các thư viện cung cấp các hàm và biến trực tiếp, nhưng tôi cần một cái gì đó tương tự cho các thư viện mở rộng chức năng hiện có như các plugin jQuery. Không có gì để xuất khẩu trong đó, nhưng tải chúng bổ sung thêm các cuộc gọi trên giao diện JQuery (được định nghĩa trong jquery.d.ts) – dcstraw

+0

Nói chung, tôi nghĩ câu trả lời của bạn không áp dụng cho câu hỏi ban đầu của tôi. Tôi không thể chỉ định đầy đủ câu hỏi của mình. Tôi sẽ đánh dấu đây là câu trả lời và đặt một câu hỏi rõ ràng hơn. – dcstraw

1

Tôi đã viết something về điều đó trên blog của mình. Bạn cũng có thể tìm thấy một ví dụ trên GitHub.

Giải pháp là khá dài để giải thích, nhưng về cơ bản tôi sử dụng miếng chêm với Require.JS để xác định tên mô-đun đại diện cho thư viện Javascript tôi muốn tải. Sau đó tôi tạo một tệp TypeScript có cùng tên để làm cho trình biên dịch TypeScript tạo ra mã Javascript có thể sử dụng thư viện JS mà tôi muốn. Không thực sự có ý nghĩa như thế này, nhưng xin vui lòng đọc bài viết và tôi nghĩ rằng nó sẽ có ý nghĩa hơn.

+0

Cảm ơn bạn đã trả lời. Tuy nhiên tôi không nghĩ rằng điều này giải quyết được vấn đề của tôi. Giải pháp này vẫn giả định rằng thư viện có ít nhất một cuộc gọi cấp cao nhất để TypeScript sẽ tạo ra sự phụ thuộc trong lời gọi 'define'. Tôi không có bất kỳ phương thức hoặc biến cấp cao nào vì các thư viện này là các plugin mở rộng chức năng hiện có. Ngoài ra tôi không nghĩ rằng bạn thực sự cần phải sử dụng miếng chêm trong ví dụ của bạn. Nếu bạn chỉ cần tạo một underscore.d.ts bên cạnh underscore.js, bạn có thể nhập mô đun 'libs/underscore' và TypeScript sẽ sử dụng tệp .d.ts. – dcstraw

+0

Tệp d.ts chỉ được sử dụng bởi Typecript để xác định xem mã của bạn có được nhập chính xác hay không. Về cơ bản nó chỉ là một giao diện, vì vậy không có mã được tạo ra bởi trình biên dịch Typescript. Bạn phải cung cấp việc triển khai thư viện Javascript theo một cách nào đó. Một giải pháp là tham chiếu một tệp Javascript trong html như bạn không muốn làm. Một giải pháp khác là sử dụng AMD để tải nó một cách không đồng bộ. Đó là giải pháp tôi đề xuất. – Absolom

+0

Đã hiểu, nhưng tôi vẫn nghĩ rằng giải pháp của bạn là phức tạp không cần thiết vì các miếng chêm. – dcstraw

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