কাস্টম টাইপস্ক্রিপ্ট সংজ্ঞা ফাইল লেখার সময় "মডিউল 'নামটি একটি টাইপযুক্ত মডিউলে ..." -এর ত্রুটি থাকা Having


90

আমি @type/{name}আমার ইনস্টলড নোডজেএস প্যাকেজগুলির মধ্যে একটির জন্য টাইপস্ক্রিপ্ট সংজ্ঞাটি খুঁজে পাচ্ছি না , তাই আমি এর d.tsজন্য একটি ফাইল লেখার চেষ্টা করি এবং ফাইলটি {project root}\typingsফোল্ডারে রেখে দেই । আমি এইভাবে করি:

// My source code: index.ts
import Helper from 'node-helper-lib';


// My definition: \typings\node-helper-lib.d.ts
declare....(something else)

declare module 'node-helper-lib' {
   class Helper { ... }
   export = Helper;
}

তবে ভিজ্যুয়াল স্টুডিও কোড এই ত্রুটিটি প্রদান করে এবং লাল রেখার নীচে রাখে declare module 'node-helper-lib':

[টিএসএস] বৃদ্ধিতে অবৈধ মডিউল নাম। মডিউল 'নোড-সহায়ক-লীব' একটি 'টাইপ মডিউল' {প্রকল্পের পথ at ode নোড_মডিউলগুলি li নোড-সহায়ক-lib \ index.js 'এ সমাধান করে, যা বাড়ানো যায় না।

এটি কি বৈধ নয় যে গ্রন্থাগারটি টাইপযুক্ত নয়, তাই আমাকে এটিতে টাইপ করার অনুমতি দেওয়া উচিত?

হালনাগাদ:

আমি ব্যাবহার করছি:

  • প্রকারলিপি: ২.১.৪
  • ভিজ্যুয়াল স্টুডিও কোড: 1.9.1
  • নোড জেএস: 6.9.4
  • উইন্ডোজ 10 x64

উত্তর:


153

আসল সমাধানটি @ হিরিকেরতে উত্তরে @ পালেও একটি মন্তব্যে দিয়েছেন:

আমদানিগুলি মডিউল ঘোষণার ভিতরে ঘোষণা করা উচিত ।

উদাহরণ:

declare module 'node-helper-lib' {
   import * as SomeThirdParty from 'node-helper-lib';
   interface Helper {
       new(opt: SomeThirdParty.Options): SomeThirdParty.Type
   }
   export = Helper;
}

55

কিছু চেষ্টা ও ত্রুটির পরে, আমি এর augmentationঅর্থ খুঁজে পেলাম যে "অন্যান্য মডিউল ঘোষণার (গুলি) সহ একই ফাইলে মডিউল ঘোষণা করা"।

সুতরাং আমরা যদি একটি টাইপযুক্ত তৃতীয় পক্ষের জাভাস্ক্রিপ্ট লাইব্রেরির জন্য একটি সংজ্ঞা ফাইল লিখতে চাই তবে আমাদের অবশ্যই declare module 'lib-name'সেই ফাইলটিতে একটি থাকতে হবে এবং 'লাইব-নাম' অবশ্যই লাইব্রেরির নামের সাথে মেলে থাকতে হবে (এর প্যাকেজটিতে পাওয়া যাবে। জেসসন, " নাম "সম্পত্তি)।

অন্যদিকে, যদি কোনও তৃতীয় পক্ষের লাইব্রেরিতে ইতিমধ্যে সংজ্ঞা ফাইল .d.ts অন্তর্ভুক্ত থাকে এবং আমরা এর কার্যকারিতা প্রসারিত করতে চাই, তবে আমরা তৈরি করা অন্য একটি ফাইলে অতিরিক্ত সংজ্ঞা রাখতে পারি। একে বলা হয় augmenting

উদাহরণ স্বরূপ:

// These module declarations are in same file, given that each of them already has their own definition file.
declare module 'events' {
   // Extended functionality
}

declare module 'querystring' {
   // Extended functionality        
}

declare module '...' { ... }

কারও কাছে একই প্রশ্ন থাকলে আমি আমার আবিষ্কারটি এখানে রেখেছি। এবং যদি আমি কিছু মিস করি তবে দয়া করে আমাকে সংশোধন করুন।


4
যদি তৃতীয় পক্ষের লাইব্রেরিতে ইতিমধ্যে সংজ্ঞায়িত ফাইল .d.ts অন্তর্ভুক্ত থাকে তবে আমি কী করব তবে আমি এটিকে উপেক্ষা করে একটি কাস্টম ব্যবহার করতে চাই?
অ্যালেন লিয়াং

24
আমি সম্পূর্ণ টাইপযুক্ত এনপিএম মডিউলের জন্য একটি সংজ্ঞা ফাইল লেখার চেষ্টা করছি, supertest- টাইপস্ক্রিপ্টের অভিযোগটি এমনকি কোনও অর্থবোধ করে না, আমি কীভাবে এমন কিছু বাড়িয়ে তুলতে পারি না যার একটি ঘোষণাও নেই? আমি ভেবেছিলাম আমি অনেকবার এর মতো কাস্টম সংজ্ঞা ফাইল লিখেছি ... [ts] Invalid module name in augmentation. Module 'supertest' resolves to an untyped module at '/home/chase/Desktop/projects/formuoli/node_modules/supertest/index.js', which cannot be augmented.- দুর্ভাগ্যক্রমে @types/supertestDOM লাইব্রেরিগুলি এটি ভাঙা রচনা করে ভেঙে গেছে ... দেখে মনে হচ্ছে আমি ভাগ্য থেকে বাইরে আছি
চেসমোস্কাল

35
@ চেসোমস্কাল: আপনার ফাইলটিতে .d.tsসম্ভবত আপনার সমস্ত আমদানি ঘোষিত মডিউল "মডিউলনাম" into} এ সরিয়ে নেওয়া উচিত}
পালেও

17
@ পালেও ঠিক এটি ছিল, সমস্ত importকলগুলি অবশ্যই declare module 'module' {}সুযোগের আওতায় চলে। ত্রুটিটি সর্বোত্তমভাবে বিভ্রান্তিকর
পোসসার

4
টাইপস্ক্রিপ্ট একই কাজ করে যদি আপনি এটির পরিবর্তে importআপনার মডিউলটির প্রয়োজনীয় বিবৃতিগুলি রাখেন declare module। এ জাতীয় অনিচ্ছাকৃত বিজোড় আচরণ (এখানে রেটিং দেওয়ার জন্য দুঃখিত)।
বিনিকি

0

আমি যে ত্রুটি বার্তা পেয়েছিলাম। আমার জন্য সমস্যাটি হ'ল আমি একটি বিদ্যমান টাইপ সংজ্ঞা ফাইলটিতে অন্য একটি মডিউল ঘোষণার চেষ্টা করছিলাম যাতে এটিতে মডিউল ঘোষণা ছিল। আমি নতুন মডিউল ঘোষণাটি একটি নতুন ফাইলে সরানোর পরে, ত্রুটিটি চলে গেছে।


-4

আমার ক্ষেত্রে আমি কেবলমাত্র আমার টাইপগুলির একটির ফাইলে নিম্নলিখিত ঘোষণাপত্র ব্যবহার করেছি যাতে আমি সমস্ত অ-টাইপলিপি প্যাকেজগুলি ব্যবহার করতে সক্ষম হয়েছি:

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