Angular-cli如何加载类型文件?

时间:2017-01-09 11:04:53

标签: jquery webpack angular-cli

好的,我有最奇怪的一天。我在一个angular-cli项目中使用jQuery和Bootstrap,我无法理解它是如何找到打字稿的类型文件的,我甚至没有指定它们的位置。

实施例 - :

我已经通过angular-cli全局加载了jquery和bootstrap文件。我甚至不必像以下那样声明jquery变量 - :

declare var $ : JQueryStatic;

VS代码自动获取智能感知,编译工作正常。

现在这是非常奇怪的部分 - :

当我使用像typeahead.js这样的jQuery插件时,我不得不导入jquery模块,如下所示:

import * as $ from 'jquery';
$("#state_input").typeahead({
            hint: true,
            highlight: true,
            minLength: 1
        }, {
                name: 'states',
                source: this.sourceFactory(this.states)
            });

如果我不这样做,则上述代码失败。它失败并显示消息typeahead is not a function在运行时间。

编译好。

此处单独导入jquery模块会有什么变化,当我之前不需要导入它并且全局加载时

由于缺乏一致性,我真的失去理智。

1 个答案:

答案 0 :(得分:0)

我可以想到三种不同的可能性:

A)检查typeahead中是否定义src/typings.d.ts,例如:

interface JQuery {
    typeahead(options?:any):JQuery;
}

B)检查您的node_modules/@types文件夹,看看是否安装了typeahead字段。

C)检查node_modules/@types/jquery/index.d.ts是不是标准jQuery,还是包含typeahead类型的twitter / bootstrap / typeahead自定义版本(如果使用mac,请执行ctrl + f(或命令+ f)并搜索typeahead在那个文件中)。在这种情况下,该文件夹甚至可能不会被称为jquery,因此请查看任何其他可疑文件夹。

VS Code正在从其中一个地方获取自动填充建议。安装类型有助于IDE自动完成,但这并不一定意味着您安装了软件包,这就是它在浏览器中失败的原因。

编辑:

D)第四种可能性是打字在其他地方定义。在项目文件夹中搜索* .d.ts文件,看看是否有任何地方出现在非标准的地方。