我正在使用SailsJS开发后端服务器。它基本上将所有模型助手服务以及我自己的服务注入全局命名空间。如果我能够获得这些服务的Intellisense,那将对我有利。
我首先设置了 typings 并为lodash和node安装了全局类型定义。创建 jsconfig.json 和 tsconfig.json 文件后,它就像一个魅力。
接下来,我想为自己的服务创建一个基本定义文件。我在 typings / globals 中创建了一个目录,其中包含 index.d.ts 文件:
/// <reference path="globals/psiewakacje/index.d.ts" />
这只是为了确保我不会浪费时间编写定义,如果它们不起作用。
接下来,我通过添加引用标记在 typings / index.d.ts 中包含 index.d.ts 文件:
foo.
令我惊讶的是,它在我的项目的Javascript文件中不起作用。在输入baz.
或import * as InternalParser from '../services/InternalParser';
后,我没有得到任何合理的智能感知。
我能够获得的唯一智能感知支持是通过以下方式在每个文件中导入这些服务:
var InternalParser = require('../services/InternalParser');
或
@RooEntity
Class X {
@Column(name = "locale")
@Convert(converter = LocaleConverter.class)
private Locale locale;
...
}
但这不使用Typescript的定义文件,只是给我导出的属性。总的来说,这是一个不可取的结果。
我想知道如何让它正常工作。我查看了node和lodash的类型定义文件,他们也这样做:声明一个具有特定类型的变量/命名空间。但是,他们的定义适用于Javascript,而我的定义则不然。如何做到对不对?
答案 0 :(得分:3)
如果创建没有tsconfig.json
编译器选项的"allowJs": "true"
文件,我可以重现上述行为。如果要将TypeScript和JavaScript文件视为一个项目,则应该有一个tsconfig.json
文件,其中包含"allowJs": "true"
,而没有jsconfig.json
文件。
答案 1 :(得分:2)
我遇到了同样的问题并发现编辑器(VSCode)正在查找文件的错误目录,问题是通过相对引用正确的路径解决的,具体路径会有所不同,但在我的示例中它是:< / p>
/// <reference path="../../typings/index.d.ts" />
index.d.ts包含以下内容:
/// <reference path="globals/core-js/index.d.ts" />
/// <reference path="globals/jasmine/index.d.ts" />
/// <reference path="globals/node/index.d.ts" />
,我的目录/文件结构如下所示:
答案 2 :(得分:1)
您不需要添加对typings/index.d.ts
的引用。最简单的方法是在项目的任何位置将声明添加到全局声明文件中。
此外,不要使用var
和namespace
,只需使用interface
。
EG。在目录的根目录中,您可以轻松添加
// index.d.ts
interface Foo {
bar: () => void
}
interface Baz { some: number }