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>;
}

(两种类型都来自这里

我究竟做错了什么?
谢谢!

4

1 回答 1

5

我究竟做错了什么?

没有什么。TypeScript 类型推断系统有点挣扎,帮助它和类型注释一起告诉它你的意思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

于 2015-05-19T06:37:39.140 回答