如何使用Typescript定义在VS Code中为我自己的Javascript服务获取Intellisense?

Vor*_*eny 13 javascript intellisense typescript visual-studio-code typescript-typings

我正在使用SailsJS开发后端服务器.它基本上将所有模型助手服务以及我自己的服务注入全局命名空间.如果我能够获得这些服务的Intellisense,那将对我有很大帮助.

我首先为lodash和node 设置了typings并安装了全局类型定义.在创建jsconfig.jsontsconfig.json文件之后,它就像一个魅力.

接下来,我想为自己的服务创建一个基本定义文件.我在typings / globals中创建了一个目录,其中包含一个index.d.ts文件:

declare namespace foo {
    export function bar();
}
declare var baz: { some: number };
Run Code Online (Sandbox Code Playgroud)

这只是为了确保我不浪费时间编写定义,如果它们不起作用.

接下来,我通过添加引用标记在typings / index.d.ts中包含index.d.ts文件:

/// <reference path="globals/psiewakacje/index.d.ts" />
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,它在我的项目的Javascript文件中不起作用.在打字foo.baz.我没有得到任何明智的智能感知.

 

我能够获得的唯一的Intellisense支持是当我通过以下方式在每个文件中导入这些服务时:

import * as InternalParser from '../services/InternalParser';
Run Code Online (Sandbox Code Playgroud)

要么

var InternalParser = require('../services/InternalParser');
Run Code Online (Sandbox Code Playgroud)

但这不使用Typescript的定义文件,只是给我导出的属性.总的来说,这是一个不理想

 

我想知道如何让它正常工作.我查看了node和lodash的类型定义文件,他们也这样做:声明一个具有特定类型的变量/命名空间.但是,他们的定义适用于Javascript,而我的定义则不然.怎么做对吗?

Mat*_*hen 5

如果我创建一个tsconfig.json没有"allowJs": "true"编译器选项的文件,我可以重现所描述的行为。如果您希望将 TypeScript 和 JavaScript 文件视为单个项目,则应该有一个有tsconfig.json文件"allowJs": "true"和没有jsconfig.json文件的文件。

  • 它对我不起作用。我尝试重新创建原始问题并应用您的建议,但我不再有任何智能感知。 (2认同)

Pel*_*obs 2

您不需要添加对 的引用typings/index.d.ts。最简单的方法是将声明添加到项目中任何位置的全局声明文件中。

此外,不要使用varand namespace,而只需使用interface

例如。在目录的根目录中,您可以轻松添加

// index.d.ts
interface Foo {
  bar: () => void
}

interface Baz { some: number }
Run Code Online (Sandbox Code Playgroud)