2016-10-26 4 views
-2

Warum wird der $ im unten stehenden Programm vom Compiler aufgelöst, vorausgesetzt, dass ich jQuery nicht importiere?TypeScript: unerwarteter Import von jQuery

function f() { 
    $('#loadFiles').click() // ok 
    $$('#loadFiles').click() // error, can't find name '$$' 
} 

Ich bin mit dem Compiler (v2.0.3) wie folgt:

  • tsc Test.ts, wo Test.ts nur den oben stehenden Text enthält;
  • mit keine tsconfig.json oder typings.json in dem enthaltenen Ordner.

ich, dass dies das Idiom häufig in Bibliotheken wie jQuery verwendet, verwendet werden kann, aber beachten Sie, dass ich bin nicht Import von jQuery (soweit ich weiß). Aber aus irgendeinem Grund akzeptiert der Compiler '$', ohne sich zu beschweren.

Kann jemand dieses Verhalten reproduzieren oder vorschlagen, wie ich versehentlich eine Definition von '$' aufheben könnte?

+1

'$' und '$$' sind völlig unterschiedliche Kennungen. jQuery weist sich nicht '$$' zu und seine Verwendung wird normalerweise nicht funktionieren (es sei denn, eine andere Bibliothek stellt sie bereit). – ssube

+0

In der Tat, das war der Punkt der Kontrastierung von "$" und "$$". Meine Frage betrifft die spezielle Behandlung von "$", nicht das Fehlen einer speziellen Behandlung für "$$"; entsprechend geklärt. – Roly

+1

Oh, mein Fehler. Haben Sie in Ihrem tsconfig irgendwelche Typ- oder Definitionsdateien? Es kann eine gute Idee sein, die tsconfig zu veröffentlichen. – ssube

Antwort

0

[Beantwortung meiner Frage]

Zuerst lief ich

tsc --traceResolution Test.ts 

wo Test.ts nur den Code enthält

export function f() { 
    $('#loadFiles').click() // ok 
} 

('Export' Hinzufügen von Modulen zu zwingen), tsconfig.json ist leer, und typings ist nicht installiert, zeigt folgende auf meinem Knoten Installation:

======== Type reference directive 'jquery' was successfully resolved to '/home/rolyp/Repo/concurrent-objects/node_modules/@types/jquery/index.d.ts', primary: true. ======== 

Mehrere andere "type reference directives" sind ebenfalls gelöst, entsprechend genau zu der von mir installierten @types packages. Das Problem scheint also zu sein, dass die Installation eines @types Pakets bestimmte Definitionen global verfügbar macht, ohne sie importieren zu müssen.

Dies scheint zu sein, wie die Dinge derzeit sind, obwohl es nicht mit Webpack interagiert, die nicht über diese impliziten Anwendungen von Paketen wissen.

+0

Sie haben meine (sachlich korrekte) Antwort abgelehnt, weil in Ihrer Frage nicht genug Informationen vorhanden waren, um das zugrunde liegende Problem zu lösen? –

-1

Es gibt keine spezielle Behandlung von $ in TypeScript.

Natürlich, wenn Sie eine Deklaration für die $ Variable, aber nicht die $$ Variable enthalten, werden sie sich anders verhalten. Nicht sicher, was du sonst noch erwarten würdest.

+0

Ok, das ist dann seltsam. Ich führe 'tsc Test.ts' für eine Datei aus, die nur den obigen Text enthält, ohne' tsconfig.json' in diesem Ordner. – Roly

+0

Weitere Details zu der Frage hinzugefügt. Ich denke, ich vermisse etwas Offensichtliches, aber ich kann es nicht sehen. – Roly

+0

Entdeckt, dass 'tsc''traceResolution' unterstützt, was zeigt, dass jQuery von einer '@ types'-Installation übernommen wird. Nun, um herauszufinden, warum dies '$' in den Geltungsbereich bringt, ohne es irgendwo importieren zu müssen. – Roly