2016-09-21 15 views
2

Ich erhalte den folgenden Fehler in der Typoskript-Datei, wenn ich versuche, einen Click-Event-Handler wie unten gezeigt anzufügen,Argument des Typs 'string' kann nicht dem Parameter '{[key: string] zugewiesen werden: any;}

Argument vom Typ 'String' ist zu Parameter des Typs nicht belegbar ‚{ [key: string]: any;}

enter image description here

ich habe jQuery 2.1.4 und jQuery. TypeScript.DefinitelyTyped 3.0.4 in meinem ASP.NET konfiguriert Internetanwendung.

Edit:

Meine Typoskript Datei zur Abholung in der Lage, die Definitionsdatei, wie unten gezeigt,

enter image description here

in meinem JQuery.d.ts, sehe ich die folgenden Überlastungen,

on(events: string, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery; 
on(events: string, data : any, handler: (eventObject: JQueryEventObject, ...args: any[]) => any): JQuery; 
on(events: string, selector: string, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery; 
on(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery; 
on(events: { [key: string]: any; }, selector?: string, data?: any): JQuery; 
on(events: { [key: string]: any; }, data?: any): JQuery; 

Was vermisse ich? Jeder Hinweis/Vorschlag wird sehr geschätzt.

+0

ich in diese lief eine Weile zurück, und wenn ich mich nicht irre, ist dies aufgrund der Anordnung der Überlastungen im 'auf Definition in jquery.d.ts. Da die Definition die Überladung "[key: string]: any" vor der Überladung "events: string" beinhaltet, kann der TypeScript-Parser diese nicht finden. Ich glaube, dass die letzte Version der Definitionsdatei auf DefinitelyTyped (3.1.1) das korrigiert hat. –

+0

@MikeMcCaughan, danke. Lass mich mit der neuesten Version versuchen. –

+0

Ich habe versucht mit dem letzten DefinitelyTyped (3.1.1) und hat nicht für mich gearbeitet. Ich sehe immer noch denselben Fehler. –

Antwort

0

Es gibt ein kleines Problem in jquery.d.ts Datei. Statt 'on' hat die Datei jquery.d.ts 'eins' (siehe Bild unten). Durch das Ändern wurde das Problem behoben.

enter image description here

+0

Ich denke nicht, dass das richtig ist - es gibt eine jquery Funktion '' one''' sowie '' on''' und das ist, was diese Zeilen deklarieren – havlock

+0

Es gibt eine richtige Antwort: [stackoverflow.com /questions/46862920](https://StackOverflow.com/questions/46862920/cant-use-foo-onclick-bar-with-jquery-and-typescript) – havlock

1

jquery.TypeScript.DefinitelyTyped 3.0.

Bitte beenden Sie die Verwendung von nuget für TypeScript-Typdefinitionen.

Beste Lösung:

Einfach herunterladen und schließen Sie diese Datei in Ihrem Projekt: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/jquery/jquery.d.ts

Mehr

  • Überprüfen Sie, ob Sie auf Typoskript sind neueste
+0

aus irgendeinem Grund scheint diese URL nicht in meiner Arbeitsumgebung zu funktionieren. Ich bekomme "Diese Website kann keine sichere Verbindung bereitstellen github.com hat eine ungültige Antwort gesendet. "Gibt es eine andere Möglichkeit, die jquery.d.ts herunterzuladen? –

1

Nach dem jquery.d.ts Für die Funktion on stehen folgende Typisierungen zur Verfügung:

1. on(events: string, selector: string, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery; 
2. on(events: string, selector: string, data: any, handler: (eventObject: JQueryEventObject, ...eventData: any[]) => any): JQuery; 
3. on(events: { [key: string]: any; }, selector?: string, data?: any): JQuery; 
4. on(events: { [key: string]: any; }, data?: any): JQuery; 

Nun, da Sie die Umsetzung der Funktion die folgende Art und Weise

$(this.elementId).on("click", changeEventHandler) 

Entweder ist die dritte oder die vierte Eingabe von on wird angewendet erhalten, die das erste Element erfordern von { [key: string]: any; } Typ sein. Was Sie tun müssen, ist einen Selektor bereitzustellen, auf den die Klickfunktion angewendet werden muss. So, hier sind Ihre Möglichkeiten:

$(this.elementId).click(changeEventHandler) 
OR 
$(document).on("click", this.elementId, changeEventHandler) 

Die Sache, die Sie gefehlt haben, ist, dass, wenn zusammen mit dem Ereignistyp die on-Funktion und der Event-Handler müssen Sie auch die DOMElement angeben, auf dem der Hörer angebracht werden soll,

+0

Danke. $ (this.elementId) .click (changeEventHandler) scheint für mich zu funktionieren. Aber, in der jquery.d.ts Datei, 6 Typings sind für die on f verfügbar Salbung. Bitte beachten Sie den entsprechenden Bearbeitungsbereich. –

+1

Ja, aber wie du es nennst, zB '$ (this.elementId) .on (" click ", changeEventHandler)' es gab nur zwei Argumente in der 'on'-Funktion, weshalb typescript den Typ' on '(Ereignisse : {[key: string]: any;}, Daten ?: any): JQuery; 'zu deiner Funktion und daher der Grund für deine Typabweichung –

+0

Sicher, lass mich mehr analysieren und meine Erkenntnisse aktualisieren. –

3

Ich hatte das gleiche Problem. Keine der vorgeschlagenen Lösungen in den Antworten und Kommentaren hat es für mich gelöst.

Es stellte sich heraus, dass die Unterschrift meines Eventhandler nicht den Typ JQueryEventObject für das erste Argument und damit die erste Überlastung nicht angewendet wurde angegeben haben.

enter image description here gegen

enter image description here

Verwandte Themen