Definitelytyped: @ type / core-js breaks build في الإصدار 0.9.37

تم إنشاؤها على ١٣ مارس ٢٠١٧  ·  47تعليقات  ·  مصدر: DefinitelyTyped/DefinitelyTyped

  • [X] حاولت استخدام الحزمة @types/xxxx وواجهت مشاكل.
  • [X] حاولت استخدام أحدث إصدار مستقر من tsc. https://www.npmjs.com/package/typescript
  • [X] لدي سؤال غير مناسب لـ StackOverflow . (يرجى طرح أي أسئلة مناسبة هناك).
  • [X] [أذكر] (https://github.com/blog/821-mention-somebody-they-re-notified) المؤلفون (انظر Definitions by: في index.d.ts ) حتى يتمكنوا من رد.

    • المؤلفون: rbuckton

يبدو أن هناك بعض المشكلات في الحزمة 0.9.37 core-js و tsc 2.2.1

أحصل على الكثير من أخطاء المترجم: (مجرد قصاصة منها)
node_modules/@angular/core/src/facade/lang.d.ts (12،17): خطأ TS2693: يشير مصطلح "الخريطة" فقط إلى نوع ، ولكن يتم استخدامه كقيمة هنا.
node_modules/@angular/core/src/facade/lang.d.ts (13،17): خطأ TS2693: يشير "Set" فقط إلى نوع ، ولكن يتم استخدامه كقيمة هنا.
node_modules/@types/core-js/index.d.ts (47،36): خطأ TS2304: لا يمكن العثور على الاسم "Iterable".
node_modules/@types/core-js/index.d.ts (350،48): خطأ TS2304: لا يمكن العثور على اسم "PropertyKey".
node_modules/@types/core-js/index.d.ts (351،52): خطأ TS2304: لا يمكن العثور على اسم "PropertyKey".
node_modules/@types/core-js/index.d.ts (352،34): خطأ TS2304: لا يمكن العثور على اسم "PropertyKey".
node_modules/@types/core-js/index.d.ts (353،34): خطأ TS2304: لا يمكن العثور على اسم "PropertyKey".
node_modules/@types/core-js/index.d.ts (354،34): خطأ TS2304: لا يمكن العثور على اسم "PropertyKey".
node_modules/@types/core-js/index.d.ts (355،61): خطأ TS2304: لا يمكن العثور على اسم "PropertyKey".
.....
node_modules/@types/core-js/index.d.ts (2103،41): الخطأ TS2339: الخاصية "toStringTag" غير موجودة في النوع "SymbolConstructor".
node_modules/@types/core-js/index.d.ts (2107،41): الخطأ TS2339: الخاصية "unscopables" غير موجودة في النوع "SymbolConstructor".
node_modules / rxjs / Observable.d.ts (69،60): خطأ TS2693: "الوعد" يشير فقط إلى نوع ، ولكن يتم استخدامه كقيمة هنا.
node_modules / rxjs / worker / toPromise.d.ts (3،79): خطأ TS2693: يشير "الوعد" فقط إلى نوع ما ، ولكن يتم استخدامه كقيمة هنا.
typecript \ shared \ login.component.ts (81،62): خطأ TS2339: الخاصية 'find' غير موجودة في النوع 'Unit []'.
typecript \ shared \ login.component.ts (81،62): خطأ TS2339: الخاصية 'find' غير موجودة في النوع 'Unit []'.

مع 0.9.35 يعمل كل شيء كما هو متوقع.

أتساءل ما إذا كان التغيير في ts.config من es5 إلى EF2017 هو الذي تسبب في ذلك؟ لا يمكنك حقًا رؤية أن أيًا من التغييرات الأخرى كان من الممكن أن تفعل ذلك؟

التعليق الأكثر فائدة

بإضافة

"lib": ["es2017", "dom"]

إلى compilerOptions في tsconfig.json هذه المشكلة بالنسبة لي.

شكرا @ andy-ms

ال 47 كومينتر

لدينا أيضًا الكثير من الأخطاء هنا. (لا يمكن العثور على الاسم "الوعد" ، لا يمكن العثور على الاسم "المجموعة" ، ...)
العودة إلى 0.9.36 يحل المشكلة بالنسبة لنا في هذه اللحظة.

@ andy-ms / mhegazy

"تعريفات بواسطة" تقول rbuckton ، لكن لا يوجد رد هناك. أرى أن الالتزام الأخير تم بواسطتك. أي تعليقات؟

إذا لم يكن rbuckton هو المسؤول ، فربما يتم تحديث index.d.ts مع المسؤولية الصحيحة؟

حاول تعيين --lib في tsconfig للحصول على التعريفات التي تحتاجها.

@ andy-ms أنا لست على دراية بالمترجم المنسوخ ، فهو داخلي وكيف يستخدم مكتبة الأنواع ، لذلك لست متأكدًا تمامًا مما يجب تعيينه في قسم lib هنا؟ و لماذا؟ يرجى تقديم النصيحة.

@ dozer75 تحقق من هذا الرابط: [خيارات المترجم

إذا كنت تقوم بتعديل ملف tsconfig.json ، فأضف خاصية lib مع مصفوفة من السلاسل تحدد المكتبات المراد تضمينها. بالنسبة لي ، كنت أستخدم @ types / core-js في بيئة خادم عقدة (مع الهدف es5 ، أي أنه تم تجميع نصي المطبوع على es5 للإنتاج) لذلك أضفت للتو "es2015" وكل شيء سار على ما يرام. يبدو أنك إذا كنت في بيئة متصفح ، فإن إضافة "dom" سيمنحك جافا سكريبت قياسي window وأشياء من هذا القبيل أيضًا.

بإضافة

"lib": ["es2017", "dom"]

إلى compilerOptions في tsconfig.json هذه المشكلة بالنسبة لي.

شكرا @ andy-ms

تقول وثائق DrDanRyan المطبوعة أن استخدام es5 كهدف يضيف DOM و ES5 و ScriptHost إلى libs. لذلك لا ينبغي أن تكون هناك حاجة.
Narven عند إضافة es2017 إلى lib الخاص بك ، لن تحتاج إلى كتابة Core-js بعد الآن. أتساءل لماذا لا تحصل على معرفات مكررة بعد ذلك.

أنا مرتبك قليلاً لماذا تعتمد كتابة core-js فجأة على مجموعة أخرى من المكتبات. لا يبدو أن هذا هو الحل الصحيح بالنسبة لي.

DaSchTour أعتقد أن lib: ["dom", "es5", "scriptHost"] هو الخيار الافتراضي المستخدم للهدف es5 إذا لم تحدد خاصية lib بنفسك . هذا ما أفهمه على الأقل ، وسيكون هذا هو السبب في عدم حصولك على معرّفات مكررة عندما تتعامل مع lib: ["es2015", "dom"] بنفسك.

أيضًا الخيار lib هو بديل لاستخدام @types/core-js بدلاً من التبعية.

DrDanRyan إنه بالتأكيد ليس بديلاً! سيحتوي lib لـ ES2017 على أكثر من @types/core-js والذي سيخفي أخطاء الترجمة عند استخدام ميزات لم يتم تعبئتها بواسطة core-js

لهذا السبب أستخدم "es2015" الذي يعمل مع خادم عقدة ...

المشكلة لا تزال قائمة. lib على أكثر من core-js لذا لا أعتقد أن كتابات core.js يجب أن "تمتد" lib .

أعتقد أننا نتحدث مع بعضنا البعض هنا. كل ما أقوله هو أنه بعد وضع lib: ["es2015"] في tsconfig.json بي ، لن أحتاج إلى استخدام @types/core-js بعد الآن ، لذا قمت بإلغاء تثبيته والآن فقط استخدم علامة المترجم.

ربط هذا بالعلاقات العامة التي تسببت في ذلك: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15108

لم يحل وضع lib: ["es2015"] المشكلة بالنسبة لي.

ما زلت احصل على

error TS2693: 'Promise' only refers to a type, but is being used as a value here.

لقد حاولت إضافة كل شيء:

  "lib": [
    "es5",
    "es2015",
    "es2017",
    "dom",
    "scripthost"
  ],

وما زلت تحصل على الخطأ

هل يمكنك تقديم الكود الذي فشل؟

انتهى بي الأمر بحلها على النحو التالي:

{
  "compilerOptions": {
    "target": "es6",
    "module": "es6",
    ...
  },
  "lib": [
    "ES5",
    "ES2015",
    "DOM",
    "ScriptHost"
  ]

وإزالة @types/core-js

@ dmitriid لا أعرف لماذا ، ولكن نفس القيمة

هنا هو tsconfig الخاص بي بالكامل.

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "es5",
      "es2015",
      "es2017",
      "dom",
      "scripthost"
    ],
    "module": "commonjs",
    "experimentalDecorators": true,
    "sourceMap": true
  }
}

على الأرجح ، لقد قمت بحل مشكلتي واستعدت تصويتي من المنشور الأصلي.

هل استخدام التكوين "lib" هو الحل المناسب على المدى الطويل ، أم سيتم إصلاح @ type / cores-js بحيث يمكن استخدامه كما كان سابقًا؟

PrimalZed لا أعتقد أن استخدام lib هو حل مناسب على الإطلاق ، لأنه يقدم ميزات قد لا تكون متاحة من خلال core-js. لذا لن يحتوي lib و @ types / core-js أبدًا على نفس مجموعة الأساليب وسيحتوي core-js دائمًا على أقل من lib.

DaSchTour دعونا نلقي نظرة على المثال:

  • توجد مكتبة X تستخدم خريطة ES6 ويتم كتابتها باستخدام تعريفات es6 lib
  • لكي تدعم المتصفحات القديمة ، قمت باستيراد core-js polyfill في الكود الخاص بك قبل استيراد X .

لا تعرف مكتبات الطرف الثالث أي شيء عن تنفيذ polyfill الفعلي ، لذا يجب أن تقدم polyfill تعريفات متطابقة لتجنب الأخطاء مثل https://github.com/DefinitelyTyped/DefinitelyTyped/issues/15104

@ just-boris ثم هناك مشروع Y وأثناء استخدام core-js والترجمة إلى es5 مع es6 lib ، يرى المطور أن السلاسل لها وظيفة تسمى التطبيع. رائع 🎉 لنستخدمه ، إنه بالضبط ما بحثت عنه. وبعد بضعة أسابيع من الاختبار على IE11 و Safari 9 ، وجدنا أخطاء غريبة كنا نأمل في تجنبها باستخدام TypeScript 🤔
أوه وفجأة يمكننا استخدام Proxy مع ES5 على IE11. لطيف!
لذلك يتعين على polyfill تنفيذ دعم كامل بنسبة 100٪ لـ ES6 لتجنب الأخطاء والسماح بالاستخدام الآمن. 100٪ ، 99،999٪ إلى أقل حيث سيكشف lib عن ميزات غير معبأة. لنفترض وداعًا وداعًا لـ core-js 😢

في نهاية المطاف ، انتهيت من الترقية إلى @ types / [email protected] وتحديث tsconfig الخاص بي إلى هذا وبالتالي الحفاظ على التوافق مع IE 11.

"lib": [
      "dom",
      "dom.iterable",
      "es2015",
      "scripthost"
    ],

بإضافة

"lib": ["es2017"، "dom"]

إلى compilerOptions في tsconfig.json حل هذه المشكلة بالنسبة لي.

Narven شكرا

@ just-boris تعليقك نجح معي ، تاي!

أحتاج إلى هذا للعمل مع "target es5" ، استخدام lib هو اختراق وله رائحة كريهة بشكل عام.

الطريقة المقترحة هي استخدام @ types / core-js ، والتي للأسف لا تعمل مع كود بسيط مثل

let p = Promise.resolve( [ 1, 2, 3 ] );
p.then( function( v ) {
  console.log( v[ 2 ] ); // 1
} );

@ andy-ms /mhegazy
إذا جاز لي ، أود أن أعود إلى الظهور وكتبت على # 15108:

أليس الهدف من ملفات تعريف Typescript هو وصف الحزم التي توفرها؟ أعتقد أن التعريف يجب أن يكون دقيقًا للحزمة ، وليس البيئة. خاصة مع core-js ، إذا كان شخص ما يستخدمها ، على سبيل المثال ، استيراد "core-js" ، فمن الممكن أن يفعلوا ذلك لأنهم يغيرون بيئتهم ، أليس كذلك؟

أحد الأسباب المهمة التي تجعل الأشخاص يستخدمون تعريفات النوع هو إظهار المشكلات في وقت الترجمة بدلاً من وقت التشغيل. من المهم جدًا في الواقع أن تمثل تعريفات core-js ما يفعله core-js على وجه التحديد لأنه لا يوفر polyfill مثاليًا لـ es2015 / es2016 / es2017. لهذا السبب - خاصةً للمكتبات مثل core-js - يجب أن تكون libs البيئة مسألة منفصلة ، على سبيل المثال ، قد لا يتطابق polyfill مع المعيار.

لا يمكن الاستخفاف بإحداث تغييرات متقطعة عبر المشاريع بسبب تغييرات كهذه كما هو موضح هنا. على سبيل المثال ، من الصعب بما يكفي تتبع تأثير ترقية حزم

تمكنت من إصلاح خطأ الترجمة الخاص بي عن طريق إضافة ما يلي إلى tsconfig.json .

    "target": "es5",
    "lib": ["es2015", "dom"]

ما هو غبي حقًا في هذا الحل ، هو أنه بدون تضمين "dom" ، فإن TypeScript سيخطئ عند استخدام Promise.

قد تحصل أيضًا على هذه الأخطاء إذا لم يتم إعداد البنية بشكل صحيح.

أنا أستخدم gulp + gulp-typecript ولم أقم بإعداد عملية إنشاء النص المطبوع لأخذ tsconfig.json في الحسبان.

لذا جرب هذا:

gulp.task('typescript', function () {
  var tsProject = ts.createProject(`${sourceRoot}/tsconfig.json`);
  return gulp.src([`${sourceRoot}/**/*.ts`])
    .pipe(tsProject())
    .pipe(gulp.dest(`${destinationRoot}`));
});

قد يساعد هذا بالاقتران مع ردود أخرى من قبل الناس: ابتسم:

بإضافة

"lib": ["es2015"، "dom"]
إلى compilerOptions في tsconfig.json حل هذه المشكلة بالنسبة لي.

مثل elusive ، tsconfig.json مع القيم المحددة إلى إصلاح مشكلة الترجمة.

ومع ذلك يبدو وكأنه اختراق.

هل من محلول أنظف في طريقه؟

لدي انطباع أن التغييرات التي أدت إلى هذه المشكلة تسربت إلى مجتمع المطورين. قام جزء واحد بتغيير tsconfig.json الخاص بهم ، بينما قام الجزء الآخر بتعيين إصدار الكتابة إلى إصدار أقدم.

DaSchTour : في حالتي ، استخدمت خدعة tsconfig.json لأنها مجرد مثال لـ Frint

لكن بالنسبة لمشروع حقيقي ، يجب إيجاد حل حقيقي. ألا يمكننا تحديث وإصلاح Core-js؟

أنا أستخدم أحدث كل شيء ولم تنجح أي من الأمثلة lib :(

أنا أرى هذا الخطأ أيضًا. إنه لا يكسر كل شيء ولكنه يزعجني عندما أرى تلك الخطوط الحمراء الصغيرة في التجميع.

يذهبون بعيدا مع:

"target": "es5"
...
"lib": ["es5","dom","scripthost","es2015"]

من الناحية الفنية اختفى الخطأ مع "lib": ["es2015","dom"] ، ولكن إذا نظرت إلى خيارات مترجم TS ، فإن حقن lib الافتراضية لهدف es5 هي "es5", "dom","scripthost" ، ولم أفعل ر تريد أن تفقد التخلف عن السداد.

ومع ذلك ، مع هذا التغيير ، لاحظت تأخرًا / أخطاءً كبيرة في ردود البرنامج مقارنةً قبل أن أضيف الخيار lib ، لذلك قمت بإزالته. سيكون الحل الحقيقي لهذا رائعًا!

فقط لمعلوماتك ، إذا كنت ترى هذه المشكلات عند محاولة تشغيل NG2 ، فإن كل هذه المشكلات تختفي عند استخدام Angular CLI.

هذا هو tsconfig الذي ينشئه Angular CLI:

"compileOnSave": false,
  "compilerOptions": {
    "outDir": "wwwroot/js/out-tsc",
    "baseUrl": "src",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2016",
      "dom"
    ]
  }

لقد تركت هذا مفتوحًا لفترة طويلة الآن ، لأن كل الأشياء المكتوبة هنا هي في رأيي حلول بديلة وليست حلولًا.

أليس هذا شيئًا سيتم حله في حزمة التعريف نفسها؟

مثل الحالات الأخرى ، من خلال إضافة إدخال lib في tsconfig ، فإنه يعمل ، ولكنه أيضًا يجعل هذه الحزمة غير ضرورية ، فلماذا نحتاج إلى هذه الحزمة على الإطلاق إذا كان من الممكن التعامل معها عن طريق ضبط lib فقط (وهو ما يجب علينا القيام به على أي حال)؟

كان الحل هو إضافة lib: ["es2015"، "dom"] في ts.config الخاص بي وقمت أيضًا بإزالة هذه المكتبة لأنها لم تكن ضرورية عندما أضفت إدخالات lib.

إذا كان مالكو هذه الحزمة لا يريدون فعل أي شيء بهذا. أقترح عليك إغلاق هذه المشكلة بتعليق لماذا وكيف تفعل ذلك بشكل صحيح حتى يعرف الجميع ما يجب فعله.

لقد نجح هذا الحل بالنسبة لي على جهاز windows.

"lib": ["es2017"، "dom"]
إلى compilerOptions في tsconfig.json حل هذه المشكلة بالنسبة لي.

شكرا @ andy-ms

Jtreu شكرًا لك على

كانت هذه هي المشكلة في بداية هذا المشروع

https://github.com/toni-rmc/laravel-angular-integration

واستجابتك تساعد في حلها.

لقد أرسلت تصريحًا عامًا لإعادة هذا إلى النموذج الصحيح: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/19531

@ dozer75ctlongDaSchTour @ راجيندر-يادافjackTheRipper

على سبيل المثال ، إذا كنت أقوم بإزالة رموز ES6 فقط باستخدام core-js ، فيجب أن تكون المكتبات المضمنة (على الأقل): es5 ، dom ، es2015.symbol

هل يمكن لأي شخص تأكيد ما إذا كان تفسيري صحيحًا؟ شكرا!
/ cc @ andy-ms

cvsguimaraes هذا يجب أن يكون صحيحا.

لا يزال هذا مكسورا؟ احصل على error TS2304: Cannot find name 'PropertyKey'. والمزيد عند 0.9.43

تحديث: لم أكن أدرك أن توفير ملف مصدر لتجميعه في سطر الأوامر مثل tsc priotractor.ts سيمنعه من قراءة `tsconfig. لقد أنشأت ملف tsconfig جديدًا فقط من أجل اختبار المنقلة الخاص بي والذي يتضمن فقط الملف الوحيد الذي أتطلع إلى تجميعه ويعمل بشكل جيد الآن.

هذا هو التكوين الخاص بي إذا كان يساعد أي شخص

{
   "compileOnSave": false,
   "compilerOptions": {
      "baseUrl": ".",
      "moduleResolution": "node",
      "emitDecoratorMetadata": true,
      "experimentalDecorators": true,
      "target": "es5",
      "typeRoots": [
         "node_modules/@types"
      ],
      "lib": [
         "es2016",
         "dom"
      ]
   },
   "files": [
      "./config/protractor.config.ts"
   ]
}

في حال تمكن شخص آخر من التعلم من خطأي. تأكد من تعديل ملف tsconfig.json في الدليل الصحيح!

بعد الكثير من ضجيج الرأس ، لاحظت أنني كنت أقوم بتحرير التكوين في جذر مشروعي بدلاً من التكوين في root / src وهو ما فتحته في VSCode. بعد إجراء التغييرات الموصى بها هناك يعمل.

أدى تحديث TypeScript إلى الإصدار 2.6.1 وتعيينه كإصدار لـ VS Code إلى حل المشكلة بالنسبة لي.

IAMtheIAM أصلحها لي ، شكرا

تم تجربة معظم إعدادات compilerOptions المدرجة هنا مع نجاح ضئيل أو لا شيء على مدار يومين. الرتق ، حتى أنني قمت بترقية حزمة مطبوعة على نظام التشغيل الخاص بي!

كان الحل سهلاً للغاية ملاحظة: لا تمرر ملفات TS إلى tsc مباشرةً ، بل حددها في tsconfig.json واتصل فقط بـ tsc .

shybovycha بقدر ما يصلح المشكلة ، تحدد المستندات أنه يمكنك ويجب أن تكون قادرًا على تمرير الملف إلى الأمر مباشرة. بدون هذا "الإصلاح" المصغر ، كنت سأظل أتلقى الأخطاء بخلاف ذلك. لدي الإصدارات التالية:

    "@types/core-js": "2.5.0"
    "core-js": "2.5.7"
    "typescript": "3.1.6"
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات