Intellij idea 如何导入jquery';Typescript 1.0中的定义文件?
我在网上搜索过,但找不到任何有用的东西,大多数文章都过时了 我所要做的就是将jQuery的定义文件包含在另一个typescript文件中 我在Intellij IDEA Ultimate 13.1中工作。代码如下: Foo.tsIntellij idea 如何导入jquery';Typescript 1.0中的定义文件?,intellij-idea,typescript,Intellij Idea,Typescript,我在网上搜索过,但找不到任何有用的东西,大多数文章都过时了 我所要做的就是将jQuery的定义文件包含在另一个typescript文件中 我在Intellij IDEA Ultimate 13.1中工作。代码如下: Foo.ts import jquery = require("./jquery"); ///<reference path="./lib/jquery.d.ts" /> import Pony = require("ts/lib/Pony"); import $ =
import jquery = require("./jquery");
///<reference path="./lib/jquery.d.ts" />
import Pony = require("ts/lib/Pony");
import $ = require("jquery");
class Main {
public main(args:string[]):void {
$(document).ready(function() {
console.log("helloo!");
var pony:Pony = new Pony("bobb");
var pony2:Pony = new Pony("Anthony");
pony.bite();
pony2.bite();
});
}
}
export = Main;
我的jquery.d.ts
与Foo.ts
编译时得到的输出是:
/opt/local/bin/tsc --sourcemap --module amd Foo.ts
/.../Foo.ts(1,1): error TS2071: Unable to resolve external module '"./jquery"'.
/.../Foo.ts(1,1): error TS2072: Module cannot be aliased to a non-module type.
它与它是一个定义文件有关。导入普通ts文件可以正常工作。我试着使用找到的建议,但从那时起语法发生了变化
非常感谢您的帮助。需要以不同方式引用声明文件 首先,包括对声明文件的引用。编译器将对其进行解析,并知道名为
jquery
1的模块存在,但它将通过其他方式在运行时可用
///<reference path="./jquery.d.ts" />
当编译器解析这一行时,它将尝试生成加载该模块所需的代码。它将查阅其已知模块列表,在其中查找jquery
,并从声明文件中加载模块的详细信息以进行类型检查
生成的加载代码与普通模块的加载代码相同,require.js
负责将模块名称转换为正确的文件名。如果模块名称与其文件名不匹配(或文件位于另一个目录中),则必须:
}))
在这里,我假设您的声明文件是来自DefinitelyTyped的,其中导出的模块称为
jquery
。如果是不同的文件,则导出的模块名称可能不同
旁注:我已经在IntelliJ和Visual Studio Express中编写了Typescript代码,我认为后者会轻而易举地获胜,IntelliJ在TS上有一些奇怪的行为。如果你在Windows上,我建议你尝试VS,但这似乎不是一个选项。好的,几小时之后,我终于想出了我想要做的事情 这就是我“优雅地”导入普通
.ts
和.d.ts
文件的方式
我想说的是,这些页面对我的搜索有很大帮助:
我正在使用Intellij IDEA Ultimate 13.1.4和TypeScript 1.0.0
Intellij中我的文件监视程序参数是--sourcemap--module amd$FileName$
我所学到的(希望这能帮助其他刚刚起步的人):
好的,那么您需要javascript和ts文件来使像jQuery这样的库工作(即.d.ts文件)
下面我发布的ts文件是逐字记录的。例如,在Pony.ts中,顶部没有参考标记,这是有意的
我的目录布局是:
..\
Website\
\js
jquery.js
jquery-ui.min.js
require.js
\ts
\lib
Animal.ts
Pony.ts
collections.ts <--- from: https://github.com/basarat/typescript-collections
jquery.d.ts <-----
jqueryui.d.ts <---- |--- from DefinatelyTyped: https://github.com/borisyankov/DefinitelyTyped
require.d.ts <-----
Main.ts
Config.ts
\css
...
...
Index.html
Config.ts
import jquery = require("./jquery");
///<reference path="./lib/jquery.d.ts" />
import Pony = require("ts/lib/Pony");
import $ = require("jquery");
class Main {
public main(args:string[]):void {
$(document).ready(function() {
console.log("helloo!");
var pony:Pony = new Pony("bobb");
var pony2:Pony = new Pony("Anthony");
pony.bite();
pony2.bite();
});
}
}
export = Main;
Animal.ts
import jquery = require("./jquery");
///<reference path="./lib/jquery.d.ts" />
import Pony = require("ts/lib/Pony");
import $ = require("jquery");
class Main {
public main(args:string[]):void {
$(document).ready(function() {
console.log("helloo!");
var pony:Pony = new Pony("bobb");
var pony2:Pony = new Pony("Anthony");
pony.bite();
pony2.bite();
});
}
}
export = Main;
正如所提供的第一个链接所述,您需要在文件的底部有
export=ClassName
。我尝试过导出类名…,但没有成功。谢谢您的帮助!我这样做了,但现在浏览器控制台出现GET
uncaught脚本错误。我认为它在抱怨找不到jquery.js。有什么想法吗?只有这么多信息很难说。实际的错误是什么,您能在网络选项卡中看到jquery.js的请求并检查它是否得到正确的响应吗?我正在查看javascript控制台。我通过下载jQuery的javascript文件(这真的有必要吗?)并将其与Foo一起放入目录,称之为dir,使其工作。现在这部分已经解决了,有没有办法将jquery文件移动到另一个目录,如lib
?我试着这样做并更改文件加载的问题更多地与您正在使用的脚本加载程序(最有可能是RequireJS)有关,而不是与TypeScript本身有关。我更新了答案,看看是否有帮助。我正在使用RequireJS,但添加require config不会改变任何东西,它仍然在Foo所在的目录中查找jquery.js文件。
import Animal = require("Animal");
class Pony extends Animal {
bite() {
alert("II, " + this.name + " have bitten you!");
}
}
export = Pony;
class Animal {
name:string;
constructor(name:string) {
this.name = name;
console.log("animal");
}
}
export = Animal;