Ich habe diese in meiner HTML-Datei definiert:
<script type="text/javascript" src="bower_components/tree.js/tree.min.js"></script>
<script type="text/javascript" src="bower_components/q/q.js"></script>
<script type="text/javascript" src="test.js"></script>
Dann in test.js:
var myTree = Tree.tree({})
Aber Typescript-Fehler sagen: "Name 'Baum' kann nicht gefunden werden"
Ich habe auch versucht, mit der Datei test.js zu kompilieren --module amd
und sie import Tree = require("model/tree");
oben zu platzieren, aber es tritt erneut ein Fehler auf: Cannot find external module 'model/tree'.
Es sollte jedoch eindeutig ein gültiger Import sein, siehe hier, wo er definiert wurde: https://github.com/marmelab/tree .js / blob / master / src / main.js
Ich möchte nicht .d.ts-Dateien für jede einzelne externe Javascript-Datei schreiben, die ich verwenden möchte. Ist das ernsthaft das, was Typescript von mir verlangt?
requirejs
typescript
Blub
quelle
quelle
Antworten:
Nein. Die einfachste / schnellste Lösung besteht darin, einfach zu sagen, dass es da draußen eine Variable
Tree
gibt. Dies ist so einfach wie:TypeSafety ist eine gleitende Skala in TypeScript. In diesem Fall teilen Sie dem Compiler nur mit, dass es etwas gibt,
Tree
das Sie verwalten werden, und kümmern sich nicht um viel Typensicherheit, außer der Tatsache, dass es vorhanden ist .Mehr
IMHO: Die Zeile
declare var Tree:any;
ist viel einfacher syntaktisch als bei anderen JS-Tools, die Sie schreiben müssten, um die Verwendung von Variablen zu deklarieren, die in Ihrem Code nicht vorhanden sind.Aktualisieren
quelle
Sie können 'require' selbst definieren und die undokumentierte amd-Abhängigkeitsfunktion von TypeScript verwenden:
Die Direktive 'amd-dependency' weist den Compiler an, Ihr Modul einzuschließen, um Argumente im generierten Code zu "definieren": Ein Beispiel finden Sie hier .
Sie können auch einen sehr guten Artikel lesen, in dem erklärt wird, wie TypeScript mit RequireJS verwendet wird.
Beachten Sie jedoch, dass Sie ohne das Schreiben der richtigen TypeScript-Definitionen für Ihren vorhandenen Code keine Typinformationen erhalten und daher keine Typensicherheitsprüfungen, keine erweiterte Code-Vervollständigung in Tools usw. erhalten. Ihr 'Baum' ist also tatsächlich vom Typ 'any' und tatsächlich ein dynamisches JS-Teil in einem anderen TS-Code.
quelle