Typescript flatMap, flat, flatten hiçbir tipte mevcut değil []


141

Chrome 70 kullanıyorum ve chrome yöntemler ekliyor .flatMap, .flatten, .flat. Yani kodum beklendiği gibi çalışıyor. Maalesef, Typescript bundan hoşlanmıyor.

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

aldığım uyarı TS2339: Property 'flatMap' does not exist on type 'any[]'.

Bu arada ben kullanıyorum Angular 6kullanan, Typescript ~2.9.2ve zaten dahil import 'core-js/es7/array';içinde polyfills.ts.

Tahminim bu yöntemler için yazım yok ve denedim npm run -dev @types/array.prototype.flatmapama yine de çözemedim.

Yanıtlar:


286

TypeScript'in tanıması için ayarınıza es2019veya eklemelisiniz ve .es2019.array--libarray.flat()flatMap()

Misal:

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

Daha önce bu esnextveya parçası olarak mevcuttu esnext.array, ancak artık resmi olarak ES2019'un bir parçası.


4
Evet, bunu yeniden üretiyorum ve işe yarıyor. İşte benim compilerOptionsde tsconfig.app.json "lib": [ "es2017", "dom", "esnext.array", ] efendim ederiz
haziq

4
Bu benim için IDE, VSCode'da düzeltmedi. Herhangi bir ipucu?
timelf123

4
@ timelf123 IDE'nizi yeniden başlattınız mı?
Brian Allan West

1
"esnext"Bunun yerine kullanmanın bir nedeni var mı (ve eğer öyleyse etkisi nedir) "esnext.array"?
maninak

7
Not: flatMap artık 11+ düğümünde destekleniyor
JeffMinsungKim

4

Kararlılığı beklerken global dizi arayüzünü genişletebilirsiniz, bu noktada varsayılan kitaplığa eklenecektir.

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

4

Aaron Beall'ın cevabı mükemmel. TsConfig.JSON dosyasında "lib" belirtilmezse varsayılan kitaplık listesinin enjekte edileceğini bilmeye değer olabilir. Enjekte edilen varsayılan kitaplıklar şunlardır: ► For --target ES5: DOM, ES5, ScriptHost ► For --target ES6: DOM, ES6, DOM.Iterable, ScriptHost

Başka bir deyişle: Daha önce otomatik olarak eklenen kitaplıkları belirtmeliyiz. ( Daha fazla bilgi için bkz: https://www.typescriptlang.org/docs/handbook/compiler-options.html )

"compilerOptions": {

   "target": "es6",

   "lib": [ "es2019", "DOM", "ES6" ,"DOM.Iterable", "ScriptHost"],}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.