Код Visual Studio с использованием JavaScript с файлом TypeScript в качестве эталона для Intellisense

В настоящее время я использую 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
}

Но это явно так не работает.

почему бы не написать приложение полностью на машинописном языке, а затем использовать что-то вроде TS-Node для последующего создания любых файлов Javascript?

Jhecht 06.03.2019 03:00

Я кое-что знаю о TypeScript. Я бы предпочел остаться с JavaScript.

Kevin Fischer 06.03.2019 03:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
169
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте то, что называется тип импорта.

/**
 * @param {typeof import('coollib')} obj
 */
function foobar(obj) {
  obj.lang.charAt(0); //with cool IntelliSense
}

Подробнее о типах импорта читайте в Примечания к выпуску TypeScript 2.9.

Спасибо, но это дает мне доступ только к функции, определенной в пространстве имен. Однако это работает: @param {import('coollib').CoolLibType}

Kevin Fischer 06.03.2019 11:49

У меня не было возможности узнать, как устроен ваш coollib. ;-) Я рад, что вы нашли способ.

Karol Majewski 06.03.2019 15:29

Другие вопросы по теме