Vor*_*eny 13 javascript intellisense typescript visual-studio-code typescript-typings
我正在使用SailsJS开发后端服务器.它基本上将所有模型助手服务以及我自己的服务注入全局命名空间.如果我能够获得这些服务的Intellisense,那将对我有很大帮助.
我首先为lodash和node 设置了typings并安装了全局类型定义.在创建jsconfig.json和tsconfig.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,而我的定义则不然.怎么做对吗?
如果我创建一个tsconfig.json没有"allowJs": "true"编译器选项的文件,我可以重现所描述的行为。如果您希望将 TypeScript 和 JavaScript 文件视为单个项目,则应该有一个有tsconfig.json文件"allowJs": "true"和没有jsconfig.json文件的文件。
您不需要添加对 的引用typings/index.d.ts。最简单的方法是将声明添加到项目中任何位置的全局声明文件中。
此外,不要使用varand namespace,而只需使用interface。
例如。在目录的根目录中,您可以轻松添加
// index.d.ts
interface Foo {
bar: () => void
}
interface Baz { some: number }
Run Code Online (Sandbox Code Playgroud)