2017-03-03 11 views
9
type someType = { 
    keyOne: string, 
    keyTwo: string, 
}; 

type someOtherType = { 
    keyOne: string, 
    keyTwo: string, 
    keyThree: string, 
}; 
इन प्रकार के

दोनों बढ़ा कर एक प्रवाह प्रकार बनाएं वस्तुओं, जिनमें शामिल है keyOne और keyTwo, फर्क सिर्फ इतना है उत्तरार्द्ध हैkeyThree के एक अतिरिक्त कुंजी के साथ पूर्व फैली हैं।प्रवाह: एक और प्रकार

डुप्लिकेट कोड लिखने के बजाय, क्या someOtherType प्रवाह प्रकार someType बढ़ाकर संभव है? मेरे दिमाग में, ES6 ऑब्जेक्ट आराम/प्रसार दिमाग में आता है, लेकिन मुझे यकीन नहीं है कि फ्लो में ऐसा कुछ कैसे पूरा किया जाए।

धन्यवाद!

+1

की संभावित डुप्लिकेट [FlowType: प्रकार की विरासत (टाइप ए ग्रुप बी के एक सबसेट है ...)] (http://stackoverflow.com/questions/42281539/flowtype-inheritance-of-types- टाइप-ए-एएस-ए-सबसेट-ऑफ-टाइप-बी) –

+0

कूल, लिंक के लिए धन्यवाद। –

उत्तर

10

आप जो देख रहे हैं वह intersection type है। प्रलेखन के अनुसार:

एक चौराहे के प्रकार के सभी इनपुट प्रकारों के लिए एक मान की आवश्यकता होती है।

सिंटेक्स: चौराहे: < टाइप 1> & < टाइप 2> ... & < प्रकार n>

चौराहे प्रकार एक मौजूदा प्रकार का विस्तार करने और इसे करने के लिए अतिरिक्त प्रकार की आवश्यकताओं को जोड़ने के लिए करना है।

type someType = { 
    keyOne: string, 
    keyTwo: string 
} 

type someOtherType = someType & { 
    keyThree: string 
} 

const shouldBeOk: someOtherType = { 
    keyOne: 'biz', 
    keyTwo: 'buzz', 
    keyThree: 'baz', 
} 

const shouldError: someOtherType = { 
    keyOne: 123, 
    keyTwo: 'hello', 
    keyThree: 'world', 
} 

// flow error: 
16: const shouldError: someOtherType = { 
          ^object literal. This type is incompatible with 
8: type someOtherType = someType & { 
         ^object type 

चौराहे के प्रकार का तार्किक विपरीत union type है। प्रलेखन के अनुसार:

एक संघ प्रकार के लिए इनपुट प्रकारों में से एक होने के लिए एक मूल्य की आवश्यकता होती है।

सिंटेक्स: संघ: < टाइप 1> | < टाइप 2> ... | < टाइप एन>

उदाहरण के तौर पर। आप एक गणना करने के लिए संघ प्रकार का उपयोग कर सकते हैं।

type fooBarBazType = 'foo' | 'bar' | 'baz'; 
const shouldBeOk: fooBarBazType = 'bar'; 

const shouldError: fooBarBazType = 'buzz'; 

4: const shouldError: fooBarBazType = 'buzz'; 
            ^string. This type is incompatible with 
4: const shouldError: fooBarBazType = 'buzz'; 
        ^string enum 
+1

ऊपर वर्णित "संभावित डुप्लिकेट" का उत्तर पुराना है। चौराहे के प्रकार [1 जुलाई, 2016 से लागू किए गए हैं] (https://flowtype.org/blog/2016/07/01/New-Unions-Intersections.html)। – thejohnbackes

+0

यह पुराना नहीं है। उस लिंक में मेरे जवाब में, मैं चौराहे के प्रकार का उल्लेख करता हूं। वे ज्यादातर मामलों के लिए काम करते हैं। हालांकि वे अजीब त्रुटि संदेशों का कारण बन सकते हैं और वे कुछ मामलों में अपेक्षित काम नहीं करते हैं (उदाहरण के लिए सटीक प्रकार के साथ)। ऑब्जेक्ट टाइप फैल इस उद्देश्य के लिए बेहतर काम करेगा और वास्तव में यह कल उतरा: https://github.com/facebook/flow/commit/ad443dc92879ae21705d4c61b942ba2f8ad61e4d –

+0

क्षमा करें नेट, मुझे गलत समझा गया। मैंने सोचा था कि आप कह रहे थे कि चौराहे के प्रकार अभी तक जारी नहीं किए गए थे। – thejohnbackes

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