Tôi có một số plugin jQuery mà tôi muốn tải bằng cách sử dụng mẫu AMD trong TypeScript. Ví dụ: tôi có thể có cấu trúc này:Tải không đồng bộ các khai báo TypeScript không có xuất khẩu
/lib/jquery.myplugin.js
/app.ts
Plugin đơn giản mở rộng jQuery. Nó không cung cấp các hàm hoặc biến cấp cao nhất mới. Một ví dụ có thể là:
// jquery.myplugin.js
jQuery.fn.myExample = function() { ... }
Các jquery.myplugin.d.ts tập tin tương ứng trông giống như:
interface JQuery {
myExample();
}
Vì vậy mà bây giờ trong app.ts tôi có thể gọi một cái gì đó giống như $('#my-element').myExample()
. Lưu ý rằng điều này giả định rằng tôi đã có các khai báo jquery.d.ts từ Microsoft được nạp.
Câu hỏi của tôi là làm cách nào để tải thư viện này một cách không đồng bộ và tận dụng lợi thế của kiểu gõ tĩnh TypeScripts? Tôi có thể sử dụng nó như thế này:
/// <reference path="lib/jquery.myplugin.d.ts"/>
nhưng điều đó đòi hỏi tôi phải thêm một thẻ <script>
sang HTML của tôi, và thư viện không được tải không đồng bộ. Tôi muốn TypeScript tạo mã này:
define(["require", "exports", "lib/jquery.myplugin"], function (require, exports, __jquery.myplugin__) {
...
// Use my plugin
$('#my-element').myExample();
}
Tuy nhiên vì không có tệp xuất trong tệp .d.ts, tôi không thể viết import myplugin = module('lib/jquery.myplugin')
.
Gần nhất tôi nhận được là tạo một jquery.myplugin.d.ts
tham chiếu tệp ts khác với khai báo giao diện và bao gồm ít nhất một lần xuất. Tuy nhiên không có gì để xuất khẩu trong thư viện này, và để có được đầu ra mong muốn, tôi không chỉ thêm một xuất khẩu mà còn phải gọi nó.
Cập nhật: Tôi đã mở một work item cho điều này trên typescript.codeplex.com
Cách giải quyết hiện tại của tôi là gọi thủ công 'require ([...],() => {...}) 'trong mã TypeScript của tôi, tạo ra một cuộc gọi yêu cầu lồng nhau. Xa lý tưởng, nhưng nó hoạt động. – dcstraw