কেন --isolatedModules ত্রুটি কোনও আমদানি দ্বারা স্থির করা হয়?


131

একটি তৈরি-প্রতিক্রিয়া-অ্যাপ্লিকেশন টাইপ স্ক্রিপ্ট প্রকল্পে, কিছু জিনিস দ্রুত পরীক্ষা করার জন্য আমি এটি লেখার চেষ্টা করেছি:

// experiment.test.ts
it('experiment', () => {
  console.log('test');
});

তবে এটি নীচে একটি লাল স্কুইগলি সহ আমাকে নীচের ত্রুটিটি দেয় it:

'--IsolatedModules' পতাকাটি সরবরাহ করা হলে সমস্ত ফাইল অবশ্যই মডিউল হতে হবে।

তবে, আমি যদি ফাইলটি নিম্নলিখিতটিতে পরিবর্তন করি তবে স্পষ্টতই সবকিছু ঠিক আছে (অব্যবহৃত আমদানি ব্যতীত):

// experiment.test.ts
import { Component} from 'react'; // literally anything, don't even have to use it

it('test', () => {
  console.log('test');
});

কেন? এখানে কি হচ্ছে? কী --isolatedModulesআসলে বলতে চাচ্ছি / না?


আপনি যদি ব্যবহার করেন importবা exportতবে ফাইলটি একটি ES6 মডিউল। আপনার শীর্ষ উদাহরণটি সমস্যাযুক্ত কারণ itকোথাও সংজ্ঞায়িত নয়, একটি মডুলার আর্কিটেকচারে আপনাকে itকোথাও থেকে আমদানি করতে হবে
— Apokryfos

উত্তর:


247

টাইপস্ক্রিপ্ট আমদানি / রফতানি ব্যতীত লিগ্যাসি স্ক্রিপ্ট ফাইল হিসাবে বিবেচনা করে। যেমন ফাইলগুলি মডিউল নয় এবং কোনও সংজ্ঞা তারা বিশ্বব্যাপী নেমস্পেসে মিশে গেছে। isolatedModulesএই জাতীয় ফাইল নিষিদ্ধ।

কোনও ফাইলে কোনও আমদানি বা রফতানি যুক্ত করা এটিকে মডিউল করে তোলে এবং ত্রুটিটি অদৃশ্য হয়ে যায়।

এছাড়াও export {}একটি সহজ উপায় কিছু আমদানি না করে একটি ফাইল একটি মডিউল করা।


আপনাকে ধন্যবাদ, খুব সহজ, তবে আপনি যখন প্রথম পরীক্ষাটি তৈরি করেন তখন আপনি ত্রুটিটি নিয়ে হতবাক হয়ে যান।
— জুয়াংউই জর্দোন

4
@ জুয়াংউই জর্ডান এত সহজ এত ভুল। আপনি না চাইলে isolatedModulesএগুলি সেট করুন false।
— ভোজসিচ বেদনারস্কি

ধন্যবাদ @ ওয়াজাইচবিডনারস্কি তবে আপনি কি নিজের উত্তরে কিছুটা ব্যাখ্যা করতে পারবেন?
— জুয়াংউই জর্ডন

4
@ জুয়াংউই জর্ডান ভাল, এটি কিছু নিয়ম যুক্ত করার পরে এটি যুক্ত করে উপেক্ষা করার মতো @ts-ignore। export {}শুধু একটি ভিন্ন সিনট্যাক্স, নিয়ম বাইপাস প্রণালী, কিন্তু নীতিগতভাবে ঠিক করে।
— ওয়াজসিচ বেদনারস্কি

4
99% সময় অনুসরণ করা হয় এমন সাধারণ নিয়ম থাকা নিয়ে আমি কোনও সমস্যা দেখছি না, তবে কখনও কখনও এটি ভেঙে ফেলা দরকার। "নিয়ম ভঙ্গ" করা, যতক্ষণ না নিয়মটি সাধারণত ভাল হয়, ততক্ষণ এটি আমাকে কী করছে তা নিয়ে ভাবতে বাধ্য করে এবং কোনও কিছুর সমাধানের আরও ভাল উপায় আছে কিনা তা বিবেচনা করতে বাধ্য করে। এবং কখনও কখনও না। এই ক্ষেত্রে যেমন আমি কিছু চেষ্টা করার জন্য যেখানে কেবল একটি পরীক্ষা-ফাইল তৈরি করছিলাম Like
— Svish

18

সঠিক উপায়টি যা চান তা টাইপস্ক্রিপ্টকে জানান। আপনি যদি নিজের ডিরেক্টরিতে isolatedModulesতৈরি করতে না চান এবং যুক্ত করুন:tsconfig.jsontest

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "isolatedModules": false
  },
}

যোগ করার পদ্ধতি "isolatedModules": trueকনফিগ এবং তারপর খালি যোগ করে টাইপ করা বিষয় পরীক্ষক প্রতারনা export {}আমাকে খারাপ কোড গন্ধ পাচ্ছি।


অন্যান্য মন্তব্যে যেমন ব্যাখ্যা করা হয়েছে, এই বিশেষ ক্ষেত্রে এটি কোড গন্ধ হিসাবে গণ্য হবে না, এটি এখানে একটি প্রয়োজনীয়তা, যেহেতু বিচ্ছিন্ন মোডুলস বিধি থেকে কিছু ফাইল আংশিকভাবে বাদ দেওয়ার উপায় নেই
— অক্ষয় বিজয় জৈন

হুম, আমি যখন মিথ্যে সত্য বলে প্রমাণ করি, তখন আমাকে জবাবে বলা হয়: টাইপ ইরর: ভেরিফিকেশন টাইপস্ক্রিপ্টসেটআপে '# <অবজেক্ট>' কেবলমাত্র সম্পত্তি 'আইসোলেটেডমডিউলস' পড়ার জন্য বরাদ্দ করা যায় না
— জেরি আশের

@ জেরিআশার এখানে একই মানুষ, তবে এটি আগে কাজ করেছিল এবং তারপরে আমি কিছু কোড উল্টিয়ে এটিকে চালানোর চেষ্টা করেছি, যখন আমি ঠিক একই ত্রুটি পেয়েছি।
— গণেশ কুমার

1

আসুন বিচ্ছিন্ন মডিউলগুলি পরীক্ষা করার চেষ্টা করি। আমি যখন গুগল চেক করেছি, এটির সরাসরি কোনও প্রসঙ্গ নেই।

এটির মূলত অর্থ হল যে আপনি টাইপস্ক্রিপ্টকে বিচ্ছিন্নতায় মডিউলগুলি সংকলন করতে দিয়েছিলেন।

তবে এটি টাইপস্ক্রিপ্ট থেকে আসে এবং টাইপসক্রিপ্টের সাথে নেমস্পেসের চেয়ে বেশি মডিউল পছন্দ করে with

মডিউলগুলির একটি মডিউল লোডার (যেমন কমনজে / আবশ্যক.জেএস) বা রানটাইম যা ইএস মডিউলগুলিকে সমর্থন করে তার উপরও নির্ভরতা থাকে। মডিউলগুলি উন্নত কোড পুনরায় ব্যবহার, শক্তিশালী বিচ্ছিন্নকরণ এবং বান্ডিলিংয়ের জন্য আরও ভাল সরঞ্জাম সরঞ্জাম সরবরাহ করে।

সূত্র ঘ

একটি তৈরি-প্রতিক্রিয়া-অ্যাপ্লিকেশন টাইপসক্রিপ্ট প্রকল্পটি ব্যবহার করে আপনার টাইপসক্রিপ্ট এবং টিএস-জাস্ট ইনস্টল করা উচিত ছিল (বা আপনি যে অ্যাপ্লিকেশনটি বের করেননি তার উপর নির্ভর করে ক্রিয়েট-রিঅ্যাক্ট-অ্যাপটি নির্ভরতা পরিচালনা করতে পারে)।

এছাড়াও ts-jestএটি সম্পর্কে কিছু তথ্য রয়েছে:

ডিফল্টরূপে টিএস-জাস্ট সম্পূর্ণ টাইপ-চেকিং এবং বৈশিষ্ট্যগুলির সাথে প্রজেক্টের (আপনার) প্রসঙ্গে টাইপস্ক্রিপ্ট সংকলক ব্যবহার করে। তবে এটি প্রতিটি ফাইল পৃথকভাবে সংকলন করতেও ব্যবহার করা যেতে পারে , যা টাইপস্ক্রিপ্টকে 'বিচ্ছিন্ন মডিউল' বলে। আইসোলেটেড মড্যুলস অপশনটি (যা মিথ্যাতে ডিফল্ট হয়) তা করে।

উত্স 2

exportকমান্ডটি ব্যবহার করার সাথে সাথে আপনি যা রফতানি করা হচ্ছে তার বাইরে একটি মডিউল তৈরি করছেন।

আপনি যদি টিএস-জাস্ট ব্যবহার করছেন, আপনি নিজের অন্যান্য মডিউলগুলিকে প্রভাবিত না করে এই সেটিংসটি যুক্ত করতে পারেন, যা তৈরি-প্রতিক্রিয়া-অ্যাপ অন্তর্ভুক্ত থাকবে।

"ts-jest": {
  "isolatedModules": false
}

এবং প্রো এবং কনসের জন্য ts-jest পৃষ্ঠা (দ্বিতীয় উত্স) চেকআউট করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.