Tìm kiếm trang web

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@3

pre 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.

Bài viết liên quan