টাইপস্ক্রিপ্ট ফ্ল্যাটম্যাপ, ফ্ল্যাট, ফ্ল্যাট কোনও প্রকারে নেই []


138

আমি ক্রোম 70 ব্যবহার করছি এবং ক্রোম পদ্ধতি যুক্ত করে .flatMap, .flatten, .flat। সুতরাং আমার কোডটি প্রত্যাশার মতো চলবে। দুর্ভাগ্যক্রমে, টাইপস্ক্রিপ্ট এটি পছন্দ করে না।

// 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"
    ]
  }
}

পূর্বে এটি esnextবা এর অংশ হিসাবে উপলব্ধ ছিল esnext.array, তবে এটি এখন আনুষ্ঠানিকভাবে ES2019 এর অংশ।


4
হ্যাঁ আমি এটি পুনরুত্পাদন করি এবং এটি কার্যকর হয়। এখানে আমার compilerOptionsমধ্যে tsconfig.app.json "lib": [ "es2017", "dom", "esnext.array", ] আপনি স্যার ধন্যবাদ
Haziq

4
এটি আমার আইডিই, ভিএসকোডে এটি ঠিক করে নি। কোন টিপস?
সময়সীমা 123

3
@ টাইমলফ 123 আপনি কি আপনার আইডিই পুনরায় চালু করলেন?
ব্রায়ান অ্যালান ওয়েস্ট

1
এর "esnext"পরিবর্তে ব্যবহার করার কোনও কারণ আছে (এবং যদি হয় তবে এর প্রভাব কী) "esnext.array"?
মানিনাক

7
দ্রষ্টব্য: ফ্ল্যাটম্যাপ এখন নোড 11+
জেফমিনসিংকিম

4

স্থিতিশীলতার জন্য অপেক্ষা করার সময় আপনি বিশ্বব্যাপী অ্যারে ইন্টারফেসটি প্রসারিত করতে পারেন, এটি এটিকে ডিফল্ট লাইব্রেরিতে যুক্ত করা হবে।

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

4

অ্যারন বেলের উত্তর দুর্দান্ত। এটি জেনে রাখা মূল্যবান যে tsConfig.JSON ফাইলটিতে "lib" নির্দিষ্ট না করা থাকলে লাইব্রেরির একটি ডিফল্ট তালিকা ইনজেকশন দেওয়া হয়। ইনজেক্ট করা ডিফল্ট লাইব্রেরিগুলি হ'ল - tar -রগারেট ES5: DOM, ES5, স্ক্রিপ্টহস্টের জন্য - --জারেট ES6: DOM, ES6, DOM.Iteable, স্ক্রিপ্টহোস্ট

অন্য কথায়: আমাদের অবশ্যই সেই লিবগুলি নির্দিষ্ট করতে হবে যা পূর্বে স্বয়ংক্রিয়ভাবে যুক্ত হয়েছিল। (দেখুন: https://www.typescriptlang.org/docs/handbook/compiler-options.html আরও তথ্যের জন্য)

"compilerOptions": {

   "target": "es6",

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

2

একক স্তরের অ্যারে ফ্ল্যাট করতে

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.