#javascript #jquery #typescript
Вопрос:
У меня в моем theme.js файл:
jQuery(function ($) {
accordion($)
})
const accordion = ($) => ...
Когда я записываю функцию аккордеона непосредственно в функцию jQuery, Typescript поможет с установленными объявлениями типов jquery. Когда разметка похожа на описанную выше, я не получаю поддержку типов в своей функции аккордеона.
Есть ли какой-нибудь способ это исправить?
Редактировать: Я должен также упомянуть, что поддержка машинописного текста для файла js исходит от VS Code
Комментарии:
1. Привет, Хью, да, ты добавил правку, хотел спросить тебя об этом. Вы можете либо добавить машинописный текст в проект, либо, если это не тот вариант, вы можете использовать систему типов из VSCode, я покажу вам в asnwer.
Ответ №1:
По сути, поскольку ваш проект не использует машинописный текст в контексте const accordion = ($)
$
gets, неявный, поскольку VSCode не может предполагать, что это на самом деле jQuery.
Есть 2 варианта, чтобы система типов соответствовала вашим потребностям: либо путем добавления машинописного текста в ваш проект, либо:
/**
* @param {JQuery} $ - the jquery instance
*/
const accordion = ($) => {
};
Этот специальный синтаксис называется a jsblock
, и он позволяет использовать функции intelisense для проектов, не написанных на машинке.
Это должно заставить VSCode распознать $
тип и запустить intelisense.
Комментарии:
1. Должен ли я включать jsblock для каждой «внешней» функции, на которую ссылается начальная функция jquery, или только один раз за ее пределами?
2. Вам придется включить блок JS для каждой функции, которая имеет неявное
any
значение . Если вы наведете курсор мыши на аргумент и увидите, что системы типов сообщают «любой», это означает, что вам нужно назначить тип либо с помощью TypeScript, либо с помощью jsblock3. Я изучил документы jsblock и начал просматривать документы TS, а также искать решение, чтобы объявить это только один раз для каждой функции, но безрезультатно. Знаете ли вы какое-либо решение для этого?