В настоящее время я использую VisualStudioCode для написания приложения nodejs, и я использую комментарии документа, чтобы связать параметры функций с классами, чтобы IntelliSense мог включиться, но я столкнулся с некоторыми проблемами, когда хочу использовать классы/типы модулей.
Как я сейчас справляюсь с делами:
class Foo{
constructor(){
this.bar = "value"
}
}
/**
* @param {Foo} parameter
*/
function foobar(parameter){
parameter.bar.charAt(0); //parameter.bar now with IntelliSense
}
В foobar теперь я вижу все доступные атрибуты/функции, к которым я могу обращаться bar.
Теперь, если где-то в узле-модуле файл TypeScript:
declare module 'coollib' {
namespace lib {
type CoolLibType = {
begin?: string | number | Date;
liveBuffer?: number;
requestOptions?: {};
highWaterMark?: number;
lang?: string;
}
}
export = lib;
}
Как я могу ссылаться на это? Я хотел бы сделать что-то подобное в моем файле JavaScript:
const CoolLibType = require('coollib')
/**
* @param {CoolLibType} obj
*/
function foobar(obj){
obj.lang.charAt(0); //with cool IntelliSense
}
Но это явно так не работает.
Я кое-что знаю о TypeScript. Я бы предпочел остаться с JavaScript.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте то, что называется тип импорта.
/**
* @param {typeof import('coollib')} obj
*/
function foobar(obj) {
obj.lang.charAt(0); //with cool IntelliSense
}
Подробнее о типах импорта читайте в Примечания к выпуску TypeScript 2.9.
Спасибо, но это дает мне доступ только к функции, определенной в пространстве имен. Однако это работает: @param {import('coollib').CoolLibType}
У меня не было возможности узнать, как устроен ваш coollib. ;-) Я рад, что вы нашли способ.
почему бы не написать приложение полностью на машинописном языке, а затем использовать что-то вроде TS-Node для последующего создания любых файлов Javascript?