好的,我有最奇怪的一天。我在一个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模块会有什么变化,当我之前不需要导入它并且全局加载时
由于缺乏一致性,我真的失去理智。
答案 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文件,看看是否有任何地方出现在非标准的地方。