टाइपस्क्रिप्ट फ्लैटपाइप, फ्लैट, फ्लैट किसी भी प्रकार पर मौजूद नहीं है []


139

मैं क्रोम 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लेकिन फिर भी हल नहीं हुआ।

जवाबों:


282

आप जोड़ना चाहिए 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
यह मेरे लिए मेरी IDE, VSCode में ठीक नहीं हुआ। कोई सुझाव?
टाइमफ्लिश १२

3
@ timelf123 क्या आपने अपना IDE पुनः आरंभ किया?
ब्रायन एलन वेस्ट

1
क्या "esnext"इसके बजाय उपयोग करने का कोई कारण है (और यदि ऐसा है तो इसका क्या प्रभाव है) "esnext.array"?
मणिनक

7
नोट: फ्लैटपोट अब नोड 11 + में समर्थित है
जेफमिंसुंगकिम

4

आप स्थिरता के लिए प्रतीक्षा करते समय वैश्विक सरणी इंटरफ़ेस का विस्तार कर सकते हैं, जिस बिंदु पर यह डिफ़ॉल्ट लाइब्रेरी में जोड़ा जाएगा।

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

4

हारून बेयल का जवाब बेहतरीन है। यह जानना योग्य हो सकता है कि यदि tsConfig.JSON फ़ाइल में "lib" निर्दिष्ट नहीं है, तो पुस्तकालयों की डिफ़ॉल्ट सूची इंजेक्ट की जाती है। डिफ़ॉल्ट लाइब्रेरी इंजेक्ट की गई हैं: ES For --getget ES5 के लिए: DOM, ES5, ScriptHost

दूसरे शब्दों में: हमें उन कामों को निर्दिष्ट करना होगा जो पहले स्वचालित रूप से जोड़े गए थे। (देखें: 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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.