You should add es2019
or es2019.array
to your --lib
setting for TypeScript to recognize array.flat()
and flatMap()
.
Example:
{
"compilerOptions": {
"target": "es5",
"lib": [
"es2019"
]
}
}
Previously this was available as part of esnext
or esnext.array
, but it's now officially part of ES2019.
If you're are in a lower version than es2019, you can implement a shiv to provide similar functionality to .flat()
and .flatMap()
provided by later libraries.
To flat single level array
arr.reduce((acc, val) => acc.concat(val), []);
To flat multi level array
function flatDeep(arr, d = 1) {
return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), []) : arr.slice();
};
to know deeply you can also check below link
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
Aaron Beall's answer is excellent. It may be worth knowing that if "lib" is not specified in the tsConfig.JSON file a default list of libraries are injected. The default libraries injected are: ► For --target ES5: DOM,ES5,ScriptHost ► For --target ES6: DOM,ES6,DOM.Iterable,ScriptHost
In other words: We must specify those libs that were previously added automatically. (see: https://www.typescriptlang.org/docs/handbook/compiler-options.html for further info)
"compilerOptions": {
"target": "es6",
"lib": [ "es2019", "DOM", "ES6" ,"DOM.Iterable", "ScriptHost"],}
You can extend the global array interface while you wait for stability, at which point it will be added to the default library.
interface Array<T> {
flat(): Array<T>;
flatMap(func: (x: T) => T): Array<T>;
}
As of angular 11 and thx to typescript 3.9 this is now the new config.
"compilerOptions": {
"target": "es2018",
"module": "es2020",
"lib": ["es2020", "dom"],
}
es2020
instead of esnext
?In TypeScript 3.9, the behavior of the TypeScript compiler controlled by module is the same with both "esnext" and "es2020" values. This behavior can change in the future, because the "esnext" option could evolve in a backwards incompatible ways, resulting in build-time or run-time errors during a TypeScript update. As a result, code can become unstable. Using the "es2020" option mitigates this risk.
for further read
You can also add esnext
to your --lib instead of 'es2019'
"compilerOptions": {
"target": "es2015",
"lib": ["dom", "esnext"]
}
It worked for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With