从具有导入的类型定义中对VS Code中的javascript文件进行智能感知

时间:2018-03-01 13:58:10

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

我试图在d.ts文件中声明自定义类型,并在javascript文件中的jsdoc注释中使用它,以便在VS Code中使用智能感知。

示例如下:

文件types.d.ts

import { Request } from "express";

declare interface IRouter {
    request: Request,
    someProp: string

    ....
}

当我试图在@type中使用它时,intellisense不起作用。

如, someFile.js

/// <reference path="types.d.ts"/>
/**
 * @type {IRouter}
 */
 let customRouter;

因此,当我使用变量&#34; customRouter&#34;时,VSCode不会提供有关可能属性的智能感知。但是,如果我将从d.ts文件中删除导入 - 那么一切正常。

在这种情况下会出现什么问题?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

添加import会使您的d.ts文件进入模块,您将无法再获取IRounter等环境类型。

要解决此问题,请:

  1. 在js文件中添加导入:

    import { IRouter } from "./types";
    
    /**
     * @type {IRouter}
     */
    let customRouter;
    
  2. 或者在d.ts中使用声明全局:

    import { Request } from "express";
    
    declare global {
        export interface IRouter {
            request: Request,
            someProp: string;
        }
    }
    

答案 1 :(得分:0)

首先,我想说的就是TypeScript的工作原理,只是为了清除它。 如果没有安装.js dist文件或@types/<library-name>软件包旁边的定义文件,TypeScript就是不知道如何做。

也就是说,我使用的是IntelliJ Ultimate,而打字可以直接使用。 我想他们要做一些额外的工作。

关于VCode ...

您会看到VSCode甚至都不希望自动完成文件名。

解决此问题的技巧是将TypeScript与triple-slash directive /// <reference

一起使用
/// <reference path="node_modules/bpmn-js/lib/Modeler.js"/>
import Modeler from 'bpmn-js/lib/Modeler';

new Modeler()

enter image description here

现在,这更多是向VSCode团队建议的功能,而不是真正的限制。