Typescript:无法使用映射函数返回构造新的Map()

时间:2015-05-19 06:30:45

标签: typescript typescript1.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

我做错了什么? 谢谢!

1 个答案:

答案 0 :(得分:5)

  

我做错了什么?

无。 TypeScript类型推理系统有点挣扎,帮助它和类型注释一起告诉它你的意思是string[][]而不是多维数组var pages:{ name: string; displayName: string; }[]; var pagesForMap = pages.map((page):[string,string] => [page.name, page.displayName]); var pagesNames = new Map(pagesForMap);

POST

这里介绍了元组类型:http://basarat.gitbooks.io/typescript/content/docs/types/type-system.html