2016-08-20 11 views
10
में

उपयुक्त तरीका में Map वस्तुओं से निपटने के लिए क्या है?ES6 मानचित्र Flowtype

const animals:Map<id, Animal> = new Map(); 

function feedAnimal(cageNumber:number) { 
    const animal:Animal = animals.get(cageNumber); 

    ... 
} 

त्रुटि

const animal:Animal = animals.get(cageNumber); 
         ^^^^^^^^^^^^^^^^^^^^^^^^ call of method `get` 

const animal:Animal = animals.get(cageNumber); 
         ^^^^^^^^^^^^^^^^^^^^^^^^ undefined. This type is incompatible with 
const animal:Animal = animals.get(cageNumber); 
         ^^^^^^^ Animal 

Flowtype Map declaration

उत्तर

11

animals.get(cageNumber) प्रकार ?Animal, नहीं Animal है। आपको यह देखना होगा कि यह अपरिभाषित नहीं कर रहा है की जरूरत है:

function feedAnimal(cageNumber:number) { 
    const animal = animals.get(cageNumber); 

    if (!animal) { 
    return; 
    } 
    // ... 
} 
+0

जोड़ा एक अद्यतन – vkurchatkin

+0

एकमात्र गोल 'void' कभी नहीं करने के लिए है, तो आप भी' उपयोग कर सकते हैं (animals.has (cageNumber)) 'जो अधिक है पठनीय (और शायद तेज़ है क्योंकि आप उन्हें बाद में हटाने के लिए चीजें आवंटित नहीं करते हैं)। लेकिन मुझे नहीं पता कि सही प्रकार, यानी 'पशु' के साथ कुछ कैसे वापस करना है। फ़्लो के अनुसार आपका समाधान और मेरा दोनों रिटर्न प्रकार 'शून्य हैं Animal'। यह समझ में आता है क्योंकि आप शायद फ्लो को अनुमान लगाने के लिए नहीं चाहते हैं कि आपका कोड क्या करता है, इसलिए वापसी का प्रकार 'जानवरों के प्रकार के बराबर है। अगर किसी के पास इसका समाधान है तो मुझे रूचि है। –