Javascript 类未在 Visual Studio Code 中获取 TypeScript 声明文件

t.8*_*888 5 javascript commonjs typescript visual-studio-code typescript-declarations

我有一个 Typescript/JavaScript 混合项目,我正在d.ts为一些 JavaScript 文件创建声明文件,以帮助管理多个类和子类。

但是,Visual Studio Code 看不到声明的类型。我在同一目录中有js相应的d.ts文件。

例如:

我的类.js

class MyClass {
  constructor(options) {}

  action(num) {
    return num.toString()
  }
}
Run Code Online (Sandbox Code Playgroud)

}

我的班级.d.ts

export interface Options {
  a: boolean
  b: boolean
}

export declare abstract class MyClass {
  constructor(options: Options)
  action(num: number): string
}
Run Code Online (Sandbox Code Playgroud)

IntelliSense不拿起定义,例如,当我将鼠标悬停在action的方法my-class.js

在此处输入图片说明

我试过在顶部添加一个参考注释,但my-class.js没有效果 ( ///<reference path="./my-class.d.ts" />)。

我在我的设置中设置了checkJs选项true

我正在使用 VS Code 版本 1.19.1

我是否需要采取其他措施才能使其发挥作用?

Jus*_*tin 4

确保工作文件夹中有jsconfig.json文件。获得此配置文件后,您的.d.ts文件应该被包含/引用。

在此输入图像描述

关于你的具体例子,据我所知,它不会像你期望的那样工作。这是因为声明范围。意思是,在.d.ts文件中,您定义一个具有 TypeScript 类型的 MyClass,然后在.js文件中定义第二个 MyClass,第二个声明也具有类型,它具有any的默认类型。如果您是从第一个类继承的,那么它可能会按照您的预期工作。

话虽如此,有些事情会起作用:

  • 您应该在类的实例上获得 IntelliSense
  • 您可以将 JSDoc 注释添加到.js文件中以定义/链接.d.ts类型

例子:

我的班级.d.ts

declare interface Options {
    a: boolean
    b: boolean
}

declare class MyClass {
  constructor(options: Options)
  action(num: number): string
}
Run Code Online (Sandbox Code Playgroud)

我的类.js

class MyClass {
  /**
  * @param {Options} options 
  */
  constructor(options) {   
  }

  action(num) {
    return num.toString();
  }
}
var foo = new MyClass({ a: true, b: false } );
foo.action(88);
Run Code Online (Sandbox Code Playgroud)

如果您将鼠标悬停在.js文件中的foo实例上,您会发现您确实获得了正确的 IntelliSense

在此输入图像描述

通过将 JSDoc 注释“@param {Options} options”添加到构造函数(),您还将获得正确的 IntelliSense

在此输入图像描述

JSDoc 和 TypeScript:https://github.com/Microsoft/TypeScript/wiki/JsDoc-support-in-JavaScript VSCode 和 TypeChecking:https://code.visualstudio.com/docs/languages/javascript#_global-variables-and -类型检查