প্রকারলিপি: কোনও মডিউলের বাইরে আমদানি বিবৃতি ব্যবহার করতে পারে না


19

আমার ডিফল্ট এক্সপোর্ট ছাড়াই নোড-মডিউল আমদানি সহ নোড জেএস (07.10.19 এর জন্য নোড.জেএস এর সর্বশেষ সংস্করণ) এ একটি .ts ফাইল রয়েছে। আমি এই নির্মাণ ব্যবহার করুন: import { Class } from 'abc';যখন আমি কোডটি রান আমি এই ত্রুটি আছে: Cannot use import statement outside a module

নেটওয়ার্কে আমি এই সমস্যার (.js) জন্য অনেকগুলি সমাধান দেখি, তবে এটি আমার পক্ষে সহায়ক হয় না, কারণ আমার টাইপস্ক্রিপ্ট ফাইল রয়েছে। আমার কোডটি এখানে:

import { Class } from 'abc';
module.exports = { ...
    execute(a : Class ,args : Array<string>){ ...

এখানে আমার tsconfig.json:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",

    "strict": true
  }
}

আপনি কি এটি ব্রাউজারে চালাচ্ছেন? importবিবৃতিটি কি আপনার ফাইলের প্রথম লাইন?
এভার্ট করুন

1
আপনি কি আপনার tsconfig.json ফাইল পোস্ট করতে পারেন? আপনি যখন টাইপস্ক্রিপ্টে সংকলন করেন, আপনি নির্ধারণ করতে পারবেন এটি কোন ধরণের মডিউল তৈরি করে এবং কোন পরিবেশ (ব্রাউজার / নোডজেএস) এবং আপনি কোন মডিউল ( requireবনাম import) ব্যবহার করেন তার উপর নির্ভর করে বৈধ প্রকারগুলি পৃথক হতে পারে। এটি আপনাকে কতটা জটিল তা বোঝানোর জন্য নোডের বনাম বনাম এবং কীভাবে তাদের একসাথে কাজ করা যায় সে সম্পর্কে কিছু ডকুমেন্টেশন রয়েছে । importrequire
জেফ বোম্যান

1
আপনি যদি module.exportsসিনট্যাক্স ব্যবহার করে থাকেন তবে আপনি সম্ভবত কোনও ES6 মডিউলটিতে নেই।
বার্গি

উল্টে যাও, এটি নোড
জেএস

ঠিক আছে, আমি প্রয়োজনীয় ব্যবহার করতে পারছি না কারণ নির্মাণকাজ করার সময় নেমস্পেস 'এবিসি' খুঁজে পাচ্ছি নাexecute(a : abc.Class...
জেরুমি

উত্তর:


5

“type”: “module”প্যাকেজ.জেসন যুক্ত করে নোডকে আপনি ES2015 মডিউলগুলি ব্যবহার করছেন বলে জানাবেন, যা ত্রুটি থেকে মুক্তি পেতে পারে তবে tsconfig.json এর “module”: “es2015”পরিবর্তে এই ধরণের মডিউল তৈরি করতে আপনাকে টাইপস্ক্রিপ্টটি বলতে হবে “commonjs”

তবে এটি বর্তমান import {}কোডটিতে সমস্যা সৃষ্টি করে কারণ আপনি ES6 বিবৃতিটি ব্যবহার করছেন যদিও আপনি সাধারণ জিন্স module.exports = {}সিনট্যাক্স ব্যবহার করে রফতানি করছেন , এবং নোডের ইএস মডিউল লোডার এতে সমস্যা থাকবে। এটির সাথে মোকাবিলা করার দুটি উপায় রয়েছে:

  1. রাখুন module.exportsকিন্তু এই ফাইল commonJS হিসেবে ব্যাখ্যা করা হবে নোড বলতে এটি একটি .cjs এক্সটেনশন দান
  2. এক্সপোর্ট স্টেটমেন্টটি ES2015 সিনট্যাক্সে পরিবর্তন করুন: export function execute(…)..

প্রথম বিকল্পটি কিছুটা জটিল হতে পারে কারণ সংকলক .js ফাইলগুলি আউটপুট দেয় এবং আপনাকে এটি সর্বদা .cjs এ পরিবর্তন করতে হবে (যতদূর আমি জানি)। দ্বিতীয় বিকল্পের সাহায্যে আপনার নোড দিয়ে ফাইল চালাতে সক্ষম হওয়া উচিত (সংস্করণ <13.8 এর জন্য - এক্সপেরিমেন্টাল-মডিউল পতাকা সহ)।

আপনার যদি একেবারে কমন জেএস ব্যবহার করার প্রয়োজন হয় তবে নোডের জন্য টাইপ সংজ্ঞা ইনস্টল করা ভাল: @ প্রকার / নোড এবং আমদানিকে সাধারণ জেএস ফর্ম্যাটে পরিবর্তন করুন: require('abc')এবং বাকি সেটিংস যেমন রয়েছে তেমন রাখুন (যদিও আপনি "টাইপ" যুক্ত করতে পারেন : প্যাকেজ.জসন থেকে "জেনারেলগুলি" স্পষ্ট করে দেওয়া)।


1
আবশ্যক ('abc')। ক্লাস .ts সংজ্ঞাগুলিতে ব্যবহার করা যায় না (যেমন: শ্রেণি) ... .cjs সম্প্রসারণ সম্পর্কে ... প্রকারগুলি কেবলমাত্র .ts ফাইলে থাকতে পারে ... ES2015 এছাড়াও আমার পছন্দ নয় কারণ আমি ব্যবহার করি পুরানো আমদানি (প্রয়োজনীয়) সহ এই মডিউলগুলি সর্বত্রই ... আমি জেএসডোক ব্যবহার করে এই সমস্যাটি সমাধান করেছি। তবে উত্তরের জন্য ধন্যবাদ
জেরুমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.