Mam wiele wtyczek jQuery, które chciałbym wczytać przy użyciu wzorca AMD w TypeScript. Na przykład, mogę mieć tę strukturę:Asynchroniczne ładowanie deklaracji TypeScript bez eksportu
/lib/jquery.myplugin.js
/app.ts
Wtyczka rozszerza jQuery. Nie zapewnia nowych funkcji lub zmiennych najwyższego poziomu. Przykładem może być:
// jquery.myplugin.js
jQuery.fn.myExample = function() { ... }
odpowiedni plik jquery.myplugin.d.ts wygląda następująco:
interface JQuery {
myExample();
}
tak, że teraz w app.ts mogę nazwać coś takiego $('#my-element').myExample()
. Zauważ, że to zakłada, że mam już załadowane deklaracje jquery.d.ts z Microsoft.
Moje pytanie brzmi: jak ładować tę bibliotekę asynchronicznie i korzystać ze statycznego pisania typu? można go używać tak:
/// <reference path="lib/jquery.myplugin.d.ts"/>
ale to wymaga ode mnie dodać do mojego <script>
tag HTML, a biblioteka nie jest ładowany asynchronicznie. Chcę maszynopis do wygenerowania tego kodu:
define(["require", "exports", "lib/jquery.myplugin"], function (require, exports, __jquery.myplugin__) {
...
// Use my plugin
$('#my-element').myExample();
}
Jednak ponieważ nie ma eksportu w .d.ts plik nie mogę napisać import myplugin = module('lib/jquery.myplugin')
.
Najbliższym, co udało mi się zrobić, jest utworzenie jquery.myplugin.d.ts
, który odwołuje się do innego pliku ts z deklaracją interfejsu i zawiera co najmniej jeden eksport. Jednak w tej bibliotece nie ma niczego do wyeksportowania, a żeby uzyskać pożądany wynik, muszę nie tylko dodać eksport, ale muszę go nazwać.
Aktualizacja: Mam otworzył work item za to na typescript.codeplex.com
Moje bieżące obejście jest ręcznie wywołać 'wymagają ([...],() => {...}) 'w moim kodzie TypeScript, który generuje zagnieżdżone wywołanie wymagające. Daleko od ideału, ale działa. – dcstraw