Есть ли способ использовать определение функции Typescript в качестве полного типа в JSDoc?

#typescript #jsdoc

#машинописный текст #jsdoc

Вопрос:

У меня есть types.d.ts книга, в которой я предоставляю типизацию для конечных пользователей библиотеки. Один из типов выглядит следующим образом:

 export type Helpers = {  foo(param: ComplexType, param2: ComplexType2): ComplexType amp; SomeIntersectionTypes;   bar(param: ComplexType, param2: ComplexType2): ComplexType amp; SomeIntersectionTypes;   baz(param: ComplexType, param2: ComplexType2): ComplexType amp; SomeIntersectionTypes; }  

Теперь в моем файле JS я хотел бы ссылаться на эти типы с помощью JSDoc, чтобы я получал немного подсказок/предупреждений о типах, если я когда-нибудь их нарушу. Что-то вроде:

 /**  * @type {typeof import('path/to/types.js').Helpers.foo}  */ foo(param, param2) { ... }  

Это просто приводит к следующей ошибке в моем редакторе, хотя кажется, что этот синтаксис (в JSDoc) в любом случае совершенно неверен:

 [tsserver 8030] [E] The type of a function declaration must match the function's signature.  

Необходимость отдельно импортировать типы параметров и формировать возвращаемые типы этих функций кажется глупой. Я просто хотел бы ввести всю функцию с учетом этого существующего определения в .d.ts файл.

Ответ №1:

Таким образом, правильный способ сделать это, по-видимому, заключается в следующем:

 /**  * @type {import('path/to/types.js').Helpers['foo']}  */ foo(param, param2) { ... }  

Я все еще немного не уверен, зачем нам нужен доступ foo таким образом, как мы это делаем, но тип найден правильно и проверен на использование этого синтаксиса.