prosource

platMap, plat, plat은 type any[]에 존재하지 않습니다.

probook 2023. 3. 29. 21:36
반응형

platMap, plat, plat은 type any[]에 존재하지 않습니다.

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[]'.

Typescript ~ 2.9.2를 사용하는 Angular 6을 사용하고 있으며, 이미 다음을 포함합니다.import 'core-js/es7/array';polyfills.ts.

이 방법들은 타이핑이 되지 않을 것 같아서npm run -dev @types/array.prototype.flatmap아직 해결하지 못했습니다.

추가하셔야 합니다.es2019또는es2019.array고객님께--libTypeScript가 인식하기 위한 설정array.flat()그리고.flatMap().

예:

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

이전에는 이 기능을esnext또는esnext.array하지만 지금은 공식적으로 ES2019의 일부입니다.

es2019보다 낮은 버전인 경우 심을 구현하여 다음과 같은 기능을 제공할 수 있습니다..flat()그리고..flatMap()최신 라이브러리에서 제공되고 있습니다.

단일 레벨 배열을 평탄하게 하려면

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

Aaron Beall의 대답은 훌륭하다.tsConfig에서 "lib"가 지정되지 않은 경우 알아두는 것이 좋습니다.JSON 파일 라이브러리의 기본 목록이 삽입됩니다.삽입되는 기본 라이브러리는 for --target ES5: DOM, ES5, ScriptHost for --target ES6: DOM, ES6, DOM 입니다.Itable, ScriptHost

즉, 다음과 같습니다.이전에 자동으로 추가된 libs를 지정해야 합니다.(자세한 내용은 https://www.typescriptlang.org/docs/handbook/compiler-options.html 참조)

"compilerOptions": {

   "target": "es6",

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

나는 대부분의 답을 시도했지만 효과가 없었다.IDE: VS코드

근데 이게...

npm i -D @types/node

안정성을 기다리는 동안 글로벌 어레이 인터페이스를 확장할 수 있습니다. 그러면 기본 라이브러리에 추가됩니다.

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

typescript 3.9에 대한 angular 11과 thx의 시점에서는 이것이 새로운 설정입니다.

"compilerOptions": {
    "target": "es2018",
    "module": "es2020",
    "lib": ["es2020", "dom"],
}

왜죠es2020대신esnext?

TypeScript 3.9에서는 모듈에 의해 제어되는 TypeScript 컴파일러의 동작은 esnext 값과 es2020 값 모두 동일합니다."esnext" 옵션이 이전과 호환되지 않는 방식으로 발전하여 TypeScript 업데이트 중에 빌드 시간 오류 또는 런타임 오류가 발생할 수 있기 때문에 이 동작은 나중에 변경될 수 있습니다.그 결과 코드가 불안정해질 수 있습니다."es2020" 옵션을 사용하면 이 위험을 줄일 수 있습니다.

더 읽어보기 위해

이 때 '어울리다'를 붙일 도 있어요.esnextes2019 합니다.

"compilerOptions": {
    "target": "es2015",
    "lib": ["dom", "esnext"]
}

그것은 나에게 효과가 있었다.

언급URL : https://stackoverflow.com/questions/53556409/flatmap-flat-flatten-doesnt-exist-on-type-any

반응형