TypeScript 编译器忽略 tsconfig.json 中的声明文件
TypeScript compiler ignores declaration file in tsconfig.json
我目前正在尝试为打字稿 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 解析模块的方式有关吗?任何帮助将不胜感激。
问题是由两件事引起的:
First,如果你使用 gulp-typescript 首先编译你的代码,然后只用 browserify 捆绑它(不使用 tsify),你有几个有关如何配置编译器的选项。如果您选择使用 tsconfig.json 配置它,您首先需要使用 gulp-typescript 创建一个 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: Duplicate identifier" 错误:解决这个问题只是将 "typings/main.d.ts" 移动到 "exclude" 部分以避免重复。
注意: typings 版本确实过时了;如果您 运行 遇到这个问题,请更新它。
我目前正在尝试为打字稿 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 解析模块的方式有关吗?任何帮助将不胜感激。
问题是由两件事引起的:
First,如果你使用 gulp-typescript 首先编译你的代码,然后只用 browserify 捆绑它(不使用 tsify),你有几个有关如何配置编译器的选项。如果您选择使用 tsconfig.json 配置它,您首先需要使用 gulp-typescript 创建一个 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: Duplicate identifier" 错误:解决这个问题只是将 "typings/main.d.ts" 移动到 "exclude" 部分以避免重复。
注意: typings 版本确实过时了;如果您 运行 遇到这个问题,请更新它。