【问题标题】:TypeScript compiler ignores declaration file in tsconfig.jsonTypeScript 编译器忽略 tsconfig.json 中的声明文件
【发布时间】:2017-02-13 02:46:18
【问题描述】:

我目前正在尝试为 typescript REST 使用者设置开发环境,但遇到以下问题:编译器似乎介意将 Typings 放在 .ts 源文件中时的引用,但完全忽略了它们当我尝试通过 tsconfig.json 中的单个 .d.ts 文件管理我的引用时。

我在尝试编译以下代码时收到error TS2307: Cannot find module 'request'.

import * as request from 'request';

module HTTPClient {
 ...   
}

这是我的 tsconfig.json 文件:

{
  "compilerOptions": {
    "jsx": "react",
    "module": "commonjs",
    "noImplicitAny": true,
    "noEmitOnError": true,
    "outDir": "./build/",
    "preserveConstEnums": true,
    "removeComments": true,
    "target": "ES5",
    "declarationFiles": true,
    "moduleResolution": "classic"
  },

  "exclude": [
    "./node_modules",
    "./build",
    "./tests"
  ],

  "include": [
    "./src/ts/**/*",
    "./typings/main.d.ts"
  ]
}

这是我用来编译和捆绑所有内容的 gulp 代码:

var typescriptProject = typescriptCompiler.createProject(project['tsconfig'], { typescript: typescript });

gulp.task(
    'compile-ts',
    function () {
        return gulp
            .src([ project['ts'] + '**/*{ts, tsx}' ])
            .pipe(typescriptCompiler(typescriptProject))
            .js
            .pipe(gulp.dest(output['js']));
    }
);

gulp.task(
    'bundle-js',
    function () {
        return browserify(output['js'] + 'main.js')
            .bundle()
            .pipe(source('bundle.js'))
            .pipe(gulp.dest(output['web']));
    }
);

我在 typings/main.d.ts 中安装并引用了 Request 的环境定义。这可能与我使用 browserify 解析模块的方式有关吗?任何帮助将不胜感激。

【问题讨论】:

    标签: javascript node.js typescript gulp browserify


    【解决方案1】:

    问题是由两件事引起的:

    首先,如果您首先使用 gulp-typescript 编译您的代码,然后仅将其与 browserify 捆绑在一起(不使用 tsify),那么您可以通过多种方式配置编译器。如果选择使用 tsconfig.json 进行配置,首先需要使用 gulp-typescript 创建一个 TypeScript Project 对象,如下所示:

    var typescriptCompiler = require('gulp-typescript');
    var typescriptProject = typescriptCompiler.createProject(project['tsconfig'], { typescript: typescript });
    

    然后将从 project 检索到的源代码提供给 gulp 任务中的编译器:

    gulp.task(
        'compile-ts',
        function () {
                return typescriptProject
                    .src()
                    .pipe(typescriptCompiler(typescriptProject))
                    .js
                    .pipe(gulp.dest(output['js']));
        }
    );
    

    第二个问题是我在来源中包含“typings/main.d.ts”。这导致了一大堆“TS2300:重复标识符”错误:解决这个问题只需将“typings/main.d.ts”移动到“排除”部分以避免重复。

    注意:打字版本确实过时了;如果您遇到此问题,请更新它。

    【讨论】:

      猜你喜欢
      • 2017-01-16
      • 2017-01-15
      • 2019-02-04
      • 2018-09-09
      • 1970-01-01
      • 2016-06-02
      • 2021-11-30
      • 2018-05-12
      • 2016-06-17
      相关资源
      最近更新 更多