node.js - وجود خطأ "الوحدة النمطية" اسم "يحل إلى وحدة نمطية غير نمطية في..." عند كتابة ملف تعريف TypeScript مخصص




typescript-typings typescript2.1 (3)

لا يمكنني العثور على TypeScript definition @type/{name} لأحد حزم NodeJS المثبتة ، لذا أحاول كتابة ملف 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;
}

ومع ذلك ، يحتفظ Visual Studio Code بإعطاء هذا الخطأ ويضع الخط الأحمر تحت declare module 'node-helper-lib' :

[ts] اسم وحدة غير صالح في زيادة. الوحدة النمطية 'node-helper-lib' يتم حلها في وحدة نمطية غير نمطية في '{مسار المشروع} \ node_modules \ node-helper-lib \ index.js' ، والتي لا يمكن زيادتها.

أليس صحيحًا لأن المكتبة غير مطبَّقة ، لذلك ينبغي أن يُسمح لي بإضافة الكتابة إليها؟

تحديث:

انا استخدم:

  • TypeScript: 2.1.4
  • رمز الاستوديو المرئي: 1.9.1
  • العقدة JS: 6.9.4
  • ويندوز 10 إلى x64

بعد بعض المحاولات والأخطاء ، وجدت أن augmentation تعني "إعلان وحدة نمطية في نفس الملف مع إعلان (إعلانات) وحدة أخرى".

لذلك إذا أردنا أن نكتب ملف تعريف لمكتبة جافا سكريبت لجهة خارجية غير مطبوعة ، يجب أن يكون لدينا ONE ONE واحد فقط declare module 'lib-name' في ذلك الملف ، ويجب أن يتطابق اسم lib-name تمامًا مع اسم المكتبة (يمكن العثور عليه في package.json لها ، "اسم" الملكية).

من ناحية أخرى ، إذا كانت مكتبة الطرف الثالث تحتوي بالفعل على ملف تعريف .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 '...' { ... }

أترك اكتشافي هنا فقط في حالة وجود سؤال لدى شخص ما. والرجاء تصحيح لي إذا فاتني شيء.


في حالتي ، كنت قد استخدمت الإعلان التالي في أحد أنواع الملفات الخاصة بي ، لذلك تمكنت من استخدام جميع الحزم غير المكتوبة على الآلة الكاتبة:

 declare module '*' 

يتم إعطاء الحل الفعلي في تعليق بواسطةPaleo في إجابة hirikarate @:

يجب الإعلان عن الواردات داخل إعلان الوحدة.

مثال:

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




typescript2.1