我有这段代码(这里只介绍相关部分):
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)
我做错了什么? 谢谢!
答案 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