2015-05-19 5 views
5

मैं इस कोड (केवल प्रासंगिक यहाँ भागों) है:टाइपप्रति: मानचित्रण समारोह से लौटने के साथ नया मानचित्र() का निर्माण नहीं किया जा सकता

interface Page { 
    name: String; 
    displayName: String; 
} 


let pages: Page[] = [{name: 'x', displayName: 'y'}, {name: 'a', displayName: 'b'}]; 
let m = new Map(pages.map(page => [page.name, page.displayName])); 

और मैं (tslint से) इसके लिए यह त्रुटि प्राप्त:

Argument of type 'String[][]' is not assignable to parameter of type 'Iterable<[{},{}]>' 

इन प्रकार के इस तरह के रूप में परिभाषित किया जाता है:

map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; 

interface MapConstructor { 
    new <K, V>(): Map<K, V>; 
    new <K, V>(iterable: Iterable<[K, V]>): Map<K, V>; 
    prototype: Map<any, any>; 
} 

(दोनों प्रकार here से कर रहे हैं)

मैं क्या गलत कर रहा हूं?
धन्यवाद!

उत्तर

4

मैं क्या गलत कर रहा हूं?

कुछ भी नहीं। टाइपप्रति प्रकार निष्कर्ष प्रणाली थोड़ा संघर्ष कर रहा है, एक प्रकार एनोटेशन यह बताने के लिए है कि आप एक tuple[string,string] नहीं एक बहु आयामी सरणी string[][] मतलब के साथ-साथ यह मदद:

var pages:{ 
    name: string; 
    displayName: string; 
}[]; 

var pagesForMap = pages.map((page):[string,string] => [page.name, page.displayName]); 
var pagesNames = new Map(pagesForMap); 

टपल प्रकार यहाँ कवर कर रहे हैं: http://basarat.gitbooks.io/typescript/content/docs/types/type-system.html

+0

नाइस ! Tnx! मेरी इच्छा है कि इसे संघर्ष नहीं करना पड़ेगा :) – Ben

+0

ठीक है। मैं देखता हूं कि इसे क्यों संघर्ष करना है। जब तक जावास्क्रिप्ट वैसे भी टुपल का समर्थन करता है :) – Ben

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