2017-03-09 16 views
8

मेरे पास एक नोडज/टाइपस्क्रिप्ट 2 प्रोजेक्ट है और es6-promise पैकेज का उपयोग करें। अब मैं अतिरिक्त पैकेज से छुटकारा पाना चाहता हूं क्योंकि मैं सीधे टाइपस्क्रिप्ट में ES6 को लक्षित कर सकता हूं।ईएस 6 वादा/टाइपस्क्रिप्ट और ब्लूबर्ड वादा

इसलिए मैंने es6- वादा पैकेज को हटा दिया और tsconfig.json को es6 को लक्षित करने के लिए बदल दिया।

{ 
    "compilerOptions": { 
    "target": "es6", 
    // ... 
    } 
} 

कई 3 पार्टी संकुल Bluebird वादा उपयोग करता है लेकिन वादा परिभाषा असंगत है करने के लिए डिफ़ॉल्ट ES6 वादा के रूप में GitHub

एस ओ मुझे निम्नलिखित त्रुटि मिल रही है।

टीएस 2322: 'ब्लूबर्ड' टाइप करें 'वादा' टाइप करने के लिए असाइन करने योग्य नहीं है। संपत्ति '[Symbol.toStringTag]' प्रकार 'ब्लूबर्ड' में गायब है।

एनपीएम @types/bluebird-global पर एक अन्य प्रकार का पैकेज है। ब्लॉग पोस्ट में से एक में उपयोगकर्ता @types/bluebird के बजाय इसका उपयोग करने का सुझाव देता है लेकिन कुछ तृतीय पक्ष पैकेज (उदा। टाइपिंग अनुक्रमित) संदर्भ ब्लूबर्ड और ब्लूबर्ड-ग्लोबल नहीं, इसलिए मुझे ब्लूबर्ड की लापता टाइपिंग के लिए एक और त्रुटि मिलती है।

इसे काम करने के लिए एक अच्छा समाधान क्या है?

+0

क्या आप डालने का प्रयास कर सकते हैं: 'इंटरफ़ेस ब्लूबर्ड {[Symbol.toStringTag]: string}' फ़ाइल 'bluebird-patch.d.ts' में? – Paleo

+0

धन्यवाद लेकिन यह मेरे लिए काम नहीं करता है। – dknaack

+0

अंत में ये पैकेज आपको लौट रहे हैं ब्लूबर्ड वादे करता है ताकि आपको अपनी परियोजना में ब्लूबर्ड पैकेज और परिभाषा फाइलों को शामिल करना चाहिए। ब्लूबर्ड वादे "वादा" का नाम बदलने का प्रयास करें जैसे वे मूल हैं वादा वास्तव में भ्रमित हो सकता है (यहां तक ​​कि 'उनके पास एक ही एपीआई है) प्लस मैं ऐसा करने के लिए वैसे भी नहीं देख रहा हूं। :) – deKajoo

उत्तर

0

चूंकि ब्लूबर्ड में [Symbol.toStringTag] नहीं है, यह वास्तव में असंगत है। वहाँ अन्य चीजें हैं जो देशी वादा से Bluebird कार्यान्वयन अलग कर रहे हैं - अनुसूचक, त्रुटि हैंडलिंग ... इस संभाल करने के लिए सही तरीका है:

const promise: Promise<type> = Promise.resolve<type>(bluebirdPromise); 

हैं क्रम संगतता सुनिश्चित करें के लिए एक मुद्दा नहीं है, इस प्रकार के साथ संबोधित किया जा सकता

const promise: Promise<type> = <Promise<type>><any><Bluebird<type>>bluebirdPromise; 

या

const promise: Promise<type> = <Promise<type>><PromiseLike<type>>bluebirdPromise; 
0

मैं

के साथ काम कर रहा था: केवल अपेक्षाकृत टाइप-सुरक्षित तरीके से कास्टिंग 0

टीएस 2322: 'ब्लूबर्ड' टाइप करें 'वादा' टाइप करने के लिए असाइन करने योग्य नहीं है। संपत्ति '[Symbol.toStringTag]' प्रकार 'ब्लूबर्ड' में गायब है।

और इस सूत्र मिला: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/10801

टी एल; डॉ; इसका संस्करण निम्न में से एक है:

  1. आपके प्रत्येक में।

    import * as Bluebird from 'bluebird';

    declare global { export interface Promise<T> extends Bluebird<T> {} }

या

एक Bluebird वादा में
  1. रैप सभी वादे: ts प्रविष्टि फ़ाइलों वैश्विक वादा अधिलेखित करने के लिए निम्नलिखित जोड़ें निर्माता। यहां कुछ रनटाइम ओवरहेड है और इसे ब्लूबर्ड की साइट पर एंटी पैटर्न के रूप में सूचीबद्ध किया गया है।

एक तरफ, मुझे काम करने का दूसरा विकल्प नहीं मिला, लेकिन पहले मेरे लिए ठीक काम किया।