جاوااسکریپت - کامپایلر تایپاسکریپت فایل اعلامیه در tsconfig.json را نادیده میگیرد
من در حال حاضر در تلاش برای راهاندازی یک محیط توسعه برای یک مصرفکننده REST تایپاسکریپت هستم و با مشکل زیر مواجه شدهام: کامپایلر به نظر میرسد به ارجاعات به Typings وقتی که آنها در فایلهای منبع .ts قرار میگیرند حساس است، اما وقتی تلاش میکنم ارجاعاتم را از طریق یک فایل .d.ts واحد در tsconfig.json مدیریت کنم، کاملاً آنها را نادیده میگیرد.
من هنگام تلاش برای کامپایل کد زیر، با خطای 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"
]
}
و این کد گالپ است که من برای کامپایل و باندل کردن همه چیز استفاده میکنم:
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']));
}
);
من تعاریف محیطی برای Request را نصب کردهام و در typings/main.d.ts ارجاع دادهام. آیا این میتواند به نحوه استفاده من از browserify برای حل ماژولها مربوط باشد؟ هر کمکی بسیار قدردانی خواهد شد.
پاسخ شماره ۱
این مشکل ناشی از دو چیز بود:
اول، اگر شما از gulp-typescript برای ابتدا کامپایل کد خود و سپس تنها با استفاده از browserify (بدون استفاده از tsify) برای بستهبندی استفاده میکنید، چندین گزینه برای پیکربندی کامپایلر دارید. اگر تصمیم بگیرید آن را با tsconfig.json پیکربندی کنید، ابتدا نیاز دارید یک شیء پروژه TypeScript با gulp-typescript به این شکل ایجاد کنید:
var typescriptCompiler = require('gulp-typescript');
var typescriptProject = typescriptCompiler.createProject(project['tsconfig'], { typescript: typescript });
سپس منابع بازیابی شده از پروژه را در تسک گالپ خود به کامپایلر بدهید:
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" منتقل کنیم تا از تکرار جلوگیری شود.
توجه: نسخه تایپینگها واقعاً منسوخ شده بود؛ اگر با این مشکل مواجه هستید، آن را بروزرسانی کنید.
