有没有办法告诉打字稿使用某个文件(或文件集)作为编译的所有内容的定义?
我目前唯一的选择是在每个打字稿文件中添加这样的东西(看起来很笨重):
/// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
答案 0 :(得分:34)
使用TypeScript的内部模块系统时,您可以避免代码中包含任何<reference>
标记。我个人这样做是因为我不想在代码中对路径(实际或绝对)进行编码,因为我经常移动它们。
执行此操作的一种方法是确保在编译期间将所有必需的声明文件和TypeScript源文件作为参数传递给编译器。
将gulp与gulp-typescript一起使用可简化此任务。您可以将noExternalResolve
中的gulp-typescript
设置为true,并创建gulp任务,将所有.d.ts文件与您的源一起传输并将其传递给编译器。当您将tsd拉入堆栈时,只需要传递包含对通过tsd.d.ts
安装的所有其他定义文件的引用的tsd
文件。
TypeScript的更新&gt; = v1.5 :您可以使用tsconfig.json文件,编译器将获得正确的类顺序。这样就无需使用gulp-typescript
。您可以选择在tsconfig.json
文件中明确列出所有文件,也可以完全省略files
属性以包含*.ts/*.tsx
所在目录中的所有tsconfig.json
个文件(包括所有子文件夹。)
示例tsconfig.json
可能如下所示:
{
"compilerOptions": {
"target": "ES5",
"module": "commonjs",
"lib": [ "es5", "es2015.promise", "dom" ]
},
"include": [
"src/**/*.ts"
]
}
答案 1 :(得分:10)
到目前为止我所学到的是 ///&lt;参考&gt; - 带参考评论的模块不是一个好方法。
例如:如果您有一个文件 Foo 和一个文件 Bar 。两个文件都使用jquery,但只有文件 Foo 对jquery有引用注释。如果由于某种原因删除了文件 Foo ,则文件 Bar 会被破坏,因为缺少参考。
如果您使用的是TypeScript&gt; = 2.0最好在&#34; files&#34; 部分的tsconfig.json中定义TypeScript定义文件(.d.ts)
这可能是这样的:
{
"compileOnSave": true,
"compilerOptions": {
"noImplicitAny": true,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es5",
"outDir": "./Scripts/"
},
"files": [
"./src/foo.ts",
"./src/bar.ts",
"./Scripts/typings/jquery/jquery.d.ts",
"./Scripts/typings/jqueryui/jqueryui.d.ts",
"./Scripts/MicrosoftMaps/Microsoft.Maps.d.ts"
]
}
在示例中经常使用///指令(引用注释)来快速入门,但这不是最佳实践。 许多例子来自版本&lt; TypeScript 2.0。
答案 2 :(得分:3)
某些IDE会自动检测项目中的所有文件(Visual Studio)。
对于其他所有内容,您可以创建一个_references.ts
文件并将所有参考评论放在那里 - 然后您只需要添加:
/// <reference path="_references.ts" />
...到每个文件(而不是可能很多)。
您的IDE也可能支持tsconfig files。
答案 3 :(得分:3)
此问题与Reference typescript definitions in one file, instead of all JS files?
重复答案是,现在,将要引用的每个文件添加到tsconfig.json文件的“files”部分。它仍然是很多行,但都在一个文件中。
将来释放Typescript 2时,您可以使用“filesGlob”部分并以两行解决问题。
答案 4 :(得分:0)
我最近刚开始使用TypeScript,而且我已经了解内部模块解析是的,您可以编译来自.ts
的所有tsconfig.json
个文件目录及其所有子目录,前提是您没有.ts
设置/// <references path="" />
个文件。
但.ts
文件编译成结果.js
文件的顺序不是由文件(或它们包含的类)所依赖的依赖项决定的。因此,可能存在子类在父类之前编译的情况(子类从父关系继承)。然后代码不会运行,即使它已成功编译。它会抱怨它无法理解子类中的父类。因此,您需要向编译器添加/// <references path="" />
作为提示,以解决.ts
文件之间的依赖关系。
这是希望Typescript文档说:
///指令是该组中最常见的。它充当文件之间的依赖声明。
三次斜杠引用指示编译器在编译过程中包含其他文件。
它们还可以作为在使用--out或--outFile时对输出进行排序的方法。在预处理传递之后,文件以与输入相同的顺序发送到输出文件位置。