gulp-typescript và các kiểu @types mới của TypeScript?
Tôi đã cài đặt @types/jasmine như một devDependency.
Tác vụ gulp của tôi để biên dịch TypeScript của tôi như sau:
gulp.task('compile:tests', ['compile:typescript', 'clean:tests'], function () {
var project = ts.createProject('tsconfig.json', { typescript: typescript });
var tsResult = gulp.src(['spec/**/*spec.ts'])
.pipe(ts(project));
return tsResult.js
.pipe(gulp.dest('spec/'));
});
và tsconfig.json của tôi
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"moduleResolution": "node"
},
"exclude": [
"node_modules"
]
}
nhưng điều này dẫn đến các lỗi:
spec\linter.spec.ts(7,1): lỗi TS2304: Không tìm thấy tên 'describe'.\nspec\linter.spec.ts(8,3): lỗi TS2304: Không tìm thấy tên 'it'.\nspec\linter.spec.ts(17,5): lỗi TS2304: Không tìm thấy tên 'expect'.\nspec\linter.spec.ts(20,3): lỗi TS2304: Không tìm thấy tên 'it'.
Làm thế nào để tôi có thể làm cho TypeScript (khi được sử dụng bởi gulp-typescript) nhận ra các kiểu @types/...?
Câu trả lời #1
Cập nhật: phiên bản mới nhất khắc phục sự cố: cài đặt với
npm install gulp-typescript@3pre gulp-typescript@3: Cho đến nay cách giải quyết của tôi là tự thêm tất cả các định nghĩa @types, như sau:
gulp.src(['spec/**/*spec.ts', "./node_modules/@types/**/*.d.ts"])
nếu bạn có các phiên bản typings mâu thuẫn (nhìn về bạn @types/node@x đây) thì bạn có thể bỏ qua chúng để tránh trùng lặp:
gulp.src([
paths.source + '**/*.ts',
"node_modules/@types/**/index.d.ts",
"!node_modules/@types/**/node_modules/**/index.d.ts"])
Câu trả lời #2
Bạn có thể sử dụng project.src() thay vì gulp.src(['typings-glob', 'sources-glob']).
** Vì lý do nào đó, trong dự án mà tôi đang làm, quá trình transpilation mất thêm ~3 giây khi sử dụng project.src(), vì vậy tôi vẫn giữ tùy chọn gulp.src.
