typescript flatMap, flat, flatten은 any [] 유형에 존재하지 않습니다.


139

나는 크롬 70을 사용하고 있으며 크롬은 메소드를 추가합니다 .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했지만 여전히 해결하지 못했습니다.

답변:


282

TypeScript가 및 을 인식하도록 설정에 es2019또는 es2019.array을 추가해야합니다 .--libarray.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에서 나를 위해 수정하지 못했습니다. 팁이 있습니까?
timelf123

3
@ timelf123 IDE를 다시 시작 했습니까?
Brian Allan West

1
"esnext"대신 사용하는 이유가 있습니까 (그렇다면 효과 는 "esnext.array"무엇입니까)?
maninak 19

7
참고 : flatMap 지금 11 + 노드에서 지원됩니다
JeffMinsungKim

4

안정성을 기다리는 동안 전역 배열 인터페이스를 확장 할 수 있습니다. 그러면 기본 라이브러리에 추가됩니다.

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

4

Aaron Beall의 대답은 훌륭합니다. tsConfig.JSON 파일에 "lib"가 지정되지 않은 경우 기본 라이브러리 목록이 삽입된다는 점을 아는 것이 좋습니다. 삽입되는 기본 라이브러리는 다음과 같습니다. ► --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.