Используя аннотацию jsdoc, как указать тип для вывода универсальной функции при вызове - PullRequest
1 голос
/ 09 мая 2019

У меня есть код, похожий на:

document.querySelectorAll('.thing').forEach(el => el.style.color = 'red');

Система подсказок типов в VsCode отмечает el.style как отсутствующую в Element. Я могу это исправить с помощью:

/** @type {NodeListOf<HTMLElement>} */
const things = document.querySelectorAll('.thing');
things.forEach(el => el.style.color = 'red');

Кажется неправильным создавать переменную с единственной целью - поддерживать систему типов VsCode счастливой.

Если бы я использовал машинопись, думаю, я мог бы сделать

document.querySelectorAll<HTMLElement>('.thing') // etc...

Есть ли способ сообщить системе типов VsCode, какой тип я ожидаю от универсального метода?

1 Ответ

1 голос
/ 09 мая 2019

Вы можете использовать jsdoc cast для этого:

// @ts-check
(/** @type {NodeListOf<HTMLElement>} */ (document.querySelectorAll('.thing'))).forEach(el => el.style.color = 'red');

Обратите внимание, что вы должны обернуть цель приведения ((document.querySelectorAll('.thing')) в скобки, чтобы тип применялся к правильному выражению.

...