2017-02-04 12 views
6

इस कोड के पैरामीटर के लिए आबंटित नहीं है:तर्क प्रकार 'ReactElement <any>

error TS2345: Argument of type 'Element' is not assignable to parameter of type 'ReactElement<any>'. 
    Type 'null' is not assignable to type 'ReactElement<any> 

यह केवल:

import * as React from 'react';                        

const Component =() => <div/>;             

function culprit<P>(node: React.ReactElement<P>) { 
    console.log(node); 
} 

culprit(<Component/>); 

... जब टाइपप्रति साथ संकलन इस संकलन त्रुटि पैदा करता है तब होता है जब सख्त नलचेक टाइपस्क्रिप्ट संकलन ध्वज true पर सेट है।

हाँ मैं उस ध्वज को अक्षम कर सकता हूं, लेकिन मैं इसे अतिरिक्त संकलन-समय की जांच/सुरक्षा के लिए चाहता हूं।

यदि मैं यह करने के लिए अंतिम पंक्ति को बदलने:

culprit((<Component/> as React.ReactElement<any>)); 

... यह झंडा true करने के लिए सेट के साथ काम करता है।

मैंने हाल ही में एक प्रतिक्रिया परियोजना में "सादा" जावास्क्रिप्ट से टाइपस्क्रिप्ट में माइग्रेट करने का प्रयास किया है और यह मेरे सभी परीक्षणों को तोड़ रहा है, इसलिए टेस्ट कोड में इन सभी घटनाओं के लिए सभी टाइपस्क्रिप्ट प्रकार के दावे जोड़ना एक दर्द होगा।

क्या यह एक बग है, या मेरे पास कोई अन्य विकल्प नहीं है?

उत्तर

9

यह स्पष्ट रूप से एक मुद्दा है जो 15.0.5 प्रतिक्रिया प्रकार परिभाषाओं में पेश किया गया था। यदि आप 15.0.4 में बदल जाते हैं, तो सबकुछ ठीक होना चाहिए। https://github.com/DefinitelyTyped/DefinitelyTyped/pull/14284

+0

मैं कोशिश की है '@ प्रकार/react' संस्करणों 15.0.6, 15.0.4, 15.0.0 और उन सभी अभी भी दुर्भाग्य से, मेरे लिए समस्या का उत्पादन:

इस मुद्दे देखें। – pleasedesktop

+0

संस्करण 0.14.57 काम करता है, लेकिन यह संघ के प्रकार से पहले था '| नल 'पेश किया गया था (जो आपको लगता है कि मुझे पाने की कोशिश कर रहा है)। फिर भी प्रतिक्रिया प्रस्तुत करने के लिए कार्यों को शून्य करने की अनुमति देना है, इसलिए मुझे नहीं लगता कि प्रतिक्रिया प्रकार परिभाषा गलत है, मुझे लगता है कि सभी प्रकार की परिभाषाएं जिन्हें 'शून्य' के लिए अनुमति नहीं है, को अद्यतन करने की आवश्यकता है। मुझे Enzyme.js से यह 'अपराधी' फ़ंक्शन हस्ताक्षर मिला, इसलिए इसकी टाइप परिभाषाओं को अद्यतन करने की आवश्यकता होगी। – pleasedesktop

+0

15.0.4 मेरी समस्या तय की, लेकिन मुझे लगता है कि आपको कुछ अलग करना होगा (या आपके सेटअप में कुछ अलग है)। –

संबंधित मुद्दे