我使用的是Chrome 70和Chrome添加方法。flatmap,。flatten,。flat。所以我的代码按预期运行。不幸的是,TypeScript不喜欢它。
// data.flatMap lint error
export const transformData = (data: any[]) => data.flatMap(abc => [
parentObj(abc),
...generateTasks(abc)
]);
我得到的警告是TS2339:属性“flatMap”在类型“any[]”上不存在。
我使用的是Angular 6,它使用Typescript ~2.9.2,并且我已经包含了import 'core-js/es7/array';在polyfills.ts。
我的猜测是这些方法没有类型,我确实尝试npm运行-dev @types/array.prototype。平面地图,但仍然没有解决。
如果你的版本比es2019低,你可以实现一个shim来提供类似于后续库提供的.flat()和. flatmap()的功能。
到平坦的单层阵列
arr.reduce((acc, val) => acc.concat(val), []);
对平面多层阵列
function flatDeep(arr, d = 1) {
return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), []) : arr.slice();
};
要深入了解,你也可以查看下面的链接
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
Aaron Beall的回答非常好。如果在tsConfig中没有指定"lib",可能值得知道。JSON文件一个默认库列表被注入。注入的默认库是:
►目标ES5: DOM,ES5,ScriptHost
►目标ES6: DOM,ES6,DOM。Iterable, ScriptHost
换句话说:我们必须指定以前自动添加的那些库。(详情见:https://www.typescriptlang.org/docs/handbook/compiler-options.html)
"compilerOptions": {
"target": "es6",
"lib": [ "es2019", "DOM", "ES6" ,"DOM.Iterable", "ScriptHost"],}