mypackage的是一種延伸到主應用程序的,並且可以 延遲加載在稍後的時間,但打字稿編譯將 只有在所有的源文件工作一起。
這是沒有必要真正編譯在一起。編譯與所有源文件一起工作的原因是因爲它正在構建您的「Mypackage」時查找您的主應用程序中所做的所有類型定義。
來處理這個正確的方法是編譯的兩個步驟。
- 編譯主應用程序並打印生成聲明文件。
- 使用從主應用程序創建的類型聲明編譯「Mypackage」。這將允許typescript編譯器在編譯Mypackage時查找它需要的所有類型。
下面的代碼示例顯示了一個類似的用例,我首先編譯我的腳本並從它們生成類型聲明,然後編譯我的規範。
var gulp = require('gulp');
var ts = require('gulp-typescript');
var merge = require('merge2');
var sourcemaps = require('gulp-sourcemaps');
var runSequence = require('run-sequence');
gulp.task('compilescripts', function() {
var tsScriptsProject = ts.createProject('scripts/tsconfig.json');
var tsResult = tsScriptsProject.src('**/*.ts')
.pipe(sourcemaps.init())
.pipe(ts(tsScriptsProject));
return merge([
tsResult.dts.pipe(gulp.dest('')),
tsResult.js.pipe(sourcemaps.write()).pipe(gulp.dest(''))
]);
});
gulp.task('compilespecs', function() {
var tsSpecProject = ts.createProject('spec/UnitTests/tsconfig.json');
var tsResult = tsSpecProject.src('**/*.ts')
.pipe(ts(tsSpecProject));
return tsResult.pipe(gulp.dest(''));
});
gulp.task('compileall', function (done) {
runSequence('compilescripts', 'compilespecs', done);
});
下面是我的編譯腳本tsconfig.json。
{
"compilerOptions": {
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"noEmitOnError": true,
"sourceMap": true,
"declaration": true,
"outFile": "dev-build/scripts/typesharp.js",
"target": "es5",
"suppressImplicitAnyIndexErrors": true
}
}