2016-06-18 9 views
11

मुझे के साथ मेरी Map ऑब्जेक्ट्स को मजबूत टाइपिंग में परेशानी हो रही है। यहाँ core-js से एक अंश मानचित्र इंटरफेस को परिभाषित है:टाइपस्क्रिप्ट मानचित्र: मजबूत प्रकारों का उपयोग कैसे करें?

interface Map<K, V> { 
    clear(): void; 
    delete(key: K): boolean; 
    forEach(callbackfn: (value: V, index: K, map: Map<K, V>) => void, thisArg?: any): void; 
    get(key: K): V; 
    has(key: K): boolean; 
    set(key: K, value?: V): Map<K, V>; 
    size: number; 
} 

मैं एक नक्शा स्ट्रिंग कुंजी का उपयोग करता है और केवल कभी आकार {name:string,price:number} साथ मान संग्रहीत कर लेता है कि बनाना चाहते हैं।

let oMap:Map<string,{name:string,price:number}> = new Map(); 

हालांकि, संकलक त्रुटि TS2322: Type 'Map<{}, {}>' is not assignable to type 'Map<string, { name: string; price: number; }>' फेंकता है: मैं के साथ मेरी वस्तु घोषित करने की कोशिश की। टाइपस्क्रिप्ट में ES6 Map ऑब्जेक्ट्स का उपयोग करते समय मजबूत टाइपिंग का लाभ उठाने का कोई तरीका है?

+0

मुझे लगता है कि यह बेहतर है {name: string, price: number} – alexeibs

+0

के लिए इंटरफ़ेस को परिभाषित करने के लिए आमतौर पर मैं ऐसा करूँगा। इससे मुझे यहां मदद नहीं मिली होगी: त्रुटि ट्रिगर की गई थी क्योंकि असाइनमेंट के सही संकेत पर कोई प्रकार नहीं था ('नया मानचित्र' के बगल में)। – BeetleJuice

उत्तर

14

आप इस तरह बनाया Map के लिए सामान्य प्रकार की जानकारी उपलब्ध कराने की आवश्यकता:

let oMap:Map<string,{name:string,price:number}> = new Map<string,{name:string,price:number}>(); 

और उसके बाद आप प्रकार घोषणा को छोड़ सकते हैं, संकलक करने के लिए काम छोड़ने:

// oMap is correctly inferred to be Map<string,{name:string,price:number}> 
let oMap = new Map<string,{name:string,price:number}>(); 
संबंधित मुद्दे