我正在使用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,而我的定义则不然.怎么做对吗?
javascript intellisense typescript visual-studio-code typescript-typings
我正在开发一个利用.d.ts文件的JavaScript项目。这是我先前提出的问题的后续问题,因此您可以在此处查看有关该项目的更多信息。
尽管我通常可以从类型文件中提取函数,但是我不能提取为空或仅由接口组成的接口或名称空间。我已经通过const为每个接口创建一个实现并@typeof ConstantImplementation在注释中使用来临时解决了此问题。请参见下面的示例:
// Typings File
export namespace test {
export interface ITest {
foo: string;
bar: number;
}
export const Test: ITest;
}
Run Code Online (Sandbox Code Playgroud)
// JS File
if (undefined) var {Test: ITest} = require("globals.d.ts").test;
// Above line shows `unused var error`
/* @type {typeof ITest} */
var x = {};
x.foo = "hello";
x.bar = 3;
// if I do `x.` intellisense should suggest `foo` and `bar`
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来解决该问题,最好是一种不会抛出错误(使用eslint ignore …