Typescript flatMap、flat、flattenはタイプany []には存在しません


138

私はChrome 70を使用していますが、Chromeはメソッドを追加します.flatMap, .flatten, .flat。したがって、私のコードは期待どおりに実行されます。残念ながら、Typescriptはそれを好みません。

// data.flatMap lint error
export const transformData = (data: any[]) => data.flatMap(abc => [
   parentObj(abc),
   ...generateTasks(abc)
]);

私が得た警告は TS2339: Property 'flatMap' does not exist on type 'any[]'.

ちなみに私が使用していますAngular 6使用している、Typescript ~2.9.2と私はすでに含まimport 'core-js/es7/array';polyfills.ts

私の推測では、これらのメソッドにはタイピングnpm run -dev @types/array.prototype.flatmapがないため、解決しようとしましたが解決しませんでした。

回答:


281

あなたは追加する必要がありますes2019か、es2019.arrayあなたの--lib設定活字体を認識するarray.flat()flatMap()

例:

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "es2019"
    ]
  }
}

これまではの一部として利用可能であったesnextesnext.array、それは公式に今ES2019の一部です。


4
うん、私はこれを再現して動作します。ここに私のcompilerOptions中のtsconfig.app.json "lib": [ "es2017", "dom", "esnext.array", ] あなたの先生ありがとう
Haziq

4
これは私のIDE、VSCodeで私のためにそれを修正しませんでした。任意のヒント?
timelf123

3
@ timelf123 IDEを再起動しましたか?
ブライアンアランウェスト

1
"esnext"代わりにを使用する理由はあり"esnext.array"ますか?
maninak

7
注:flatMapがノード11+でサポートされるようになりました
JeffMinsungKim

4

安定を待つ間、グローバルアレイインターフェイスを拡張できます。その時点で、デフォルトのライブラリに追加されます。

interface Array<T> {
    flat(): Array<T>;
    flatMap(func: (x: T) => T): Array<T>;
}

4

アーロン・ビールの答えは素晴らしいです。「lib」がtsConfig.JSONファイルで指定されていない場合、ライブラリのデフォルトリストが挿入されることを知っておく価値があります。注入されるデフォルトのライブラリは次のとおりです。►--target ES5の場合:DOM、ES5、ScriptHost►--target 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"],}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.