我是否必须在每个文件中引用typescript定义

Hot*_*f68 50 javascript typescript

有没有办法告诉typescript使用某个文件(或文件集)作为编译的所有内容的定义?

我目前唯一的选择是在每个打字稿文件中添加这样的东西(看起来很笨重):

/// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
Run Code Online (Sandbox Code Playgroud)

Dyn*_*lon 37

使用TypeScript的内部模块系统时,可以避免<reference>代码中包含任何标记.我个人这样做是因为我不想在代码中编码路径(实际或绝对),因为我经常移动东西.

一种方法是确保在编译期间将所有必需的声明文件和TypeScript源文件作为参数传递给编译器.

使用一饮而尽连同一饮而尽,打字稿简化了这一任务.您可以设置noExternalResolvegulp-typescript为true,并创建一个把你所有.d.ts文件与源和管道下来的编译器一起大口的任务.当您将tsd插入堆栈时,您只需要传递tsd.d.ts包含对通过其安装的所有其他定义文件的引用的文件tsd.

TypeScript> = v1.5的UPDATE:您可以使用tsconfig.json文件,编译器将获得正确的类的排序.这消除了全部使用的需要gulp-typescript.您可以选择将所有文件明确列在tsconfig.json文件中,也可以完全忽略该files属性以包含*.ts/*.tsxtsconfig.json驻留目录中的所有文件(包括所有子文件夹).

示例tsconfig.json可能如下所示:

{
    "compilerOptions": {
        "target": "ES5",
        "module": "commonjs",
        "lib": [ "es5", "es2015.promise", "dom" ]
    },
    "include": [
        "src/**/*.ts"
    ]
}
Run Code Online (Sandbox Code Playgroud)

  • 代码示例将受到欢迎! (5认同)
  • 如果:在同一模块内,文件A.ts中有A类,文件B.ts中有B类,A扩展为B,你还需要告诉tsc B.ts应该被转换为A.ts,对吧? (4认同)

juF*_*uFo 10

到目前为止我学到的是/// <reference> -带参考注释的模块不是一个好方法.

例如:如果您有文件Foo和文件.两个文件都使用jquery,但只有文件Foo对jquery有引用注释.如果由于某种原因删除了文件Foo,则文件栏将被破坏,因为缺少引用.

如果您使用的是TypeScript> = 2.0最好在tsconfig.json中的"files"部分下定义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"
  ]
}
Run Code Online (Sandbox Code Playgroud)

在示例中经常使用///指令(引用注释)来快速入门,但这不是最佳实践.许多示例来自版本<TypeScript 2.0.