2016-09-21 27 views
2

Я получаю следующую ошибку в файле машинописных файлов, когда пытаюсь подключить обработчик события click, как показано ниже,Аргумент типа 'string' не присваивается параметру type '{[key: string]: any;}

Аргумент типа 'строка' не может быть назначен для параметра типа «{ [ключ: строка]: любая;}

enter image description here

у меня есть JQuery 2.1.4 и JQuery. ТипScript.DefinitelyTyped 3.0.4, настроенный в моем ASP.NET Веб приложение.

Edit:

Моего файл машинопись может пикап файл определение, как показано ниже,

enter image description here

в моем JQuery.d.ts, я вижу следующие перегрузки,

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; 

Что мне не хватает? Любые намеки/предложения будут очень признательны.

+0

Я побежал в это время назад, и если я не ошибаюсь, это связано с упорядочением перегрузках в 'на 'определение в jquery.d.ts. В основном, поскольку определение включает в себя '[key: string]: любая' перегрузка перед перегрузкой 'events: string', парсер TypeScript не может его найти. Я считаю, что последняя версия файла определения на DefinitelyTyped (3.1.1) исправила это. –

+0

@MikeMcCaughan, спасибо. Позвольте мне попробовать с последней версией. –

+0

Я пробовал с последним DefinitelyTyped (3.1.1) и не работал для меня. Я все еще вижу ту же ошибку. –

ответ

0

Существует небольшая проблема в jquery.d.ts файле. Вместо «on» файл jquery.d.ts имеет «один» (см. Изображение ниже). Изменение этого исправляло проблему.

enter image description here

+0

Я не думаю, что это правильно - есть функция jquery '' 'one''', а также' '' on''', и это то, что объявляют эти строки. – havlock

+0

Существует правильный ответ: [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.

Пожалуйста, прекратите использование nuget для определения типа TypeScript.

Лучшее решение:

Просто скачайте и включить этот файл в вашем проекте: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/jquery/jquery.d.ts

Больше

  • Убедитесь, что вы на машинопись последнее
+0

по какой-то причине этот URL-адрес, похоже, не работает в моей рабочей среде. Я получаю «Этот сайт не может обеспечить безопасное соединение github.com отправил неверный ответ ». Есть ли другой способ загрузить jquery.d.ts? –

1

Согласно jquery.d.ts для функции on доступны следующие типы:

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; 

Теперь, поскольку вы реализуете функцию следующим образом

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

будет получить применяется Либо третий или четвёртый типирование on, которые требуют первого элемента, чтобы быть типа { [key: string]: any; }. Что вам нужно сделать, это предоставить селектор, к которому необходимо применить функцию кликов. Так вот ваши варианты:

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

Дело в том, что вы пропали без вести в том, что при использовании функции on вместе с типом события и обработчик событий необходимо также указать DOMElement, на котором слушатель должен быть прикреплен

+0

Спасибо. $ (this.elementId) .click (changeEventHandler), похоже, работает на меня. Но в Файл jquery.d.ts, 6 типов доступны для on f соборование. См. Раздел редактирования. –

+1

Да, но так, как вы его вызывали, т.е. '$ (this.elementId) .on (" click ", changeEventHandler)' в 'on' было только два аргумента, поэтому в машинописном тексте применяется тип' on (события : {[key: string]: any;}, data ?: any): JQuery; 'вашей функции и, следовательно, причина вашего несоответствия типа –

+0

Конечно, позвольте мне проанализировать больше и обновить мои выводы. –

3

У меня была та же проблема. Ни одно из предлагаемых решений в ответах и ​​комментариях не решило его для меня.

Оказалось, что подпись моего событияHandler не указывает тип JQueryEventObject для первого аргумента, и поэтому первая перегрузка не была применена.

enter image description here против

enter image description here

Смежные вопросы