【发布时间】:2015-05-13 09:45:43
【问题描述】:
有没有办法告诉 TypeScript 使用某个文件(或一组文件)作为所有编译内容的定义?
我目前唯一的选择是在每个 TypeScript 文件中添加类似的内容(这看起来很笨重):
/// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
【问题讨论】:
标签: javascript typescript
有没有办法告诉 TypeScript 使用某个文件(或一组文件)作为所有编译内容的定义?
我目前唯一的选择是在每个 TypeScript 文件中添加类似的内容(这看起来很笨重):
/// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
【问题讨论】:
标签: javascript typescript
一些 IDE 会自动检测项目中的所有文件 (Visual Studio)。
对于其他所有内容,您可以创建一个_references.ts 文件并将所有参考 cmets 放入其中 - 然后您只需添加:
/// <reference path="_references.ts" />
...到每个文件(而不是可能很多)。
您的 IDE 也可能支持tsconfig files。
【讨论】:
使用 TypeScript 的内部模块系统时,您可以完全避免在代码中包含任何 <reference> 标记。我个人这样做是因为我不想在代码中编码路径(真实的或绝对的),因为我不断地移动东西。
一种方法是确保在编译期间将所有必需的声明文件和 TypeScript 源文件作为参数传递给编译器。
将gulp 与gulp-typescript 一起使用可以简化此任务。您可以将 gulp-typescript 中的 noExternalResolve 设置为 true,并创建 gulp 任务,将所有 .d.ts 文件连同源代码一起通过管道传递给编译器。当您将tsd 拉入您的堆栈时,您只需传递包含对通过tsd 安装的所有其他定义文件的引用的tsd.d.ts文件。
TypeScript 更新>= 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"
]
}
【讨论】:
namespaces),这仍然是一件令人讨厌的事情
这个问题与Reference typescript definitions in one file, instead of all JS files?重复
答案是,现在,将您要引用的每个文件添加到 tsconfig.json 文件的“文件”部分。它仍然有很多行,但都在一个文件中。
将来当Typescript 2 发布时,您可以使用“filesGlob”部分并分两行解决问题。
【讨论】:
If no "files" property is present in a tsconfig.json, the compiler defaults to including all TypeScript (*.ts or *.tsx) files in the containing directory and subdirectories. When a "files" property is present, only the specified files are included.
node_modules、dist、bower_components、typings 等)。我正在拼命等待filesGlob 登陆核心 TS。
我最近开始使用 TypeScript,据我了解,内部模块的解决方案是,是的,您可以从 tsconfig.json 的目录及其所有子目录编译所有 .ts 文件,前提是您不这样做'没有在其中设置 .ts 文件,但没有 /// <references path="" />。
但是.ts 文件被编译成.js 文件的顺序不是由文件(或它们包含的类)所具有的依赖关系决定的。因此可能会出现子类在父类之前编译的情况(子类继承自父关系)。然后代码不会运行,即使它编译成功。它会抱怨它无法理解子类中的父类。因此,您需要添加/// <references path="" /> 作为提示给编译器以解决.ts 文件之间的依赖关系。
这是要 Typescript 文档说的:
/// 指令是该组中最常见的。它用作文件之间依赖关系的声明。
三斜杠引用指示编译器在编译过程中包含其他文件。
当使用 --out 或 --outFile 时,它们还用作对输出进行排序的方法。预处理通过后,文件按照与输入相同的顺序发送到输出文件位置。
【讨论】:
到目前为止,我了解到的是 ///
例如:如果您有一个文件 Foo 和一个文件 Bar。这两个文件都使用 jquery,但只有文件 Foo 有对 jquery 的引用注释。如果文件 Foo 因某种原因被删除,则您的文件 Bar 已损坏,因为缺少引用。
如果您使用 TypeScript >= 2.0,最好在 "files" 部分下的 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"
]
}
在示例中经常使用 /// 指令(参考 cmets)来帮助您快速入门,但这不是最佳实践。 还有许多示例来自
【讨论】: