TypeScript编译器忽略tsconfig.json中的声明文件。

5

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

在尝试编译以下代码时,我遇到了错误TS2307:找不到模块“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解析模块的方式有关?非常感谢您的帮助。

1个回答

2
问题是由两个因素引起的: 首先,如果你使用gulp-typescript编译代码,然后仅使用browserify(而不使用tsify)进行打包,你有几个选项来配置编译器。如果你选择使用tsconfig.json进行配置,你需要首先创建一个TypeScript项目对象,如下所示:
var typescriptCompiler = require('gulp-typescript');
var typescriptProject = typescriptCompiler.createProject(project['tsconfig'], { typescript: typescript });

然后在您的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" 移动到 "exclude" 部分以避免重复。
注意:typings 版本确实已经过时;如果您遇到此问题,请更新它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接