【问题标题】:Visual Studio Code using JavaScript with a TypeScript File as Reference for Intellisense使用带有 TypeScript 文件的 JavaScript 作为 Intellisense 参考的 Visual Studio Code
【发布时间】:2019-07-27 14:27:14
【问题描述】:

我目前正在使用 VisualStudioCode 编写一个 nodejs 应用程序,并且我正在使用 doc cmets 将函数的参数链接到类,以便 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 编写应用程序,然后使用 TS-Node 之类的东西来构建任何 Javascript 文件?
  • 我对 TypeScript 有所了解。我宁愿继续使用 JavaScript。

标签: javascript node.js typescript visual-studio-code intellisense


【解决方案1】:

使用所谓的导入类型

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

TypeScript 2.9 release notes 中阅读有关导入类型的更多信息。

【讨论】:

  • 谢谢,但这样只能让我访问命名空间中定义的函数。但是它确实可以这样工作:@param {import('coollib').CoolLibType}
  • 我无法知道您的coollib 的结构。 ;-) 我很高兴你找到了办法。
猜你喜欢
  • 1970-01-01
  • 2016-02-07
  • 2016-06-15
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 2016-07-14
  • 2012-10-15
  • 2017-08-02
相关资源
最近更新 更多