programing

TypeScript의 ES7 Object.entries()가 작동하지 않음

telecom 2023. 6. 19. 21:08
반응형

TypeScript의 ES7 Object.entries()가 작동하지 않음

ES7 코드를 TypeScript로 변환하는 데 문제가 있습니다.다음 코드:

const sizeByColor = {
    red: 100,
    green: 500,
};

for ( const [ color, size ] of Object.entries(sizeByColor) ) {
    console.log(color);
    console.log(size);
}

다음과 같은 오류가 표시됩니다.

TypeError: Object.entries is not a function

TypeScript v2.0.3

tsconfig.json:

{
"compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "noImplicitAny": true,
    "noEmitOnError": true,
    "outDir": "dist",
    "allowSyntheticDefaultImports": true,
    "experimentalDecorators": true,
    "pretty": true,
    "lib": [ "es2017" ],
},
"exclude": [
    "node_modules"
],
"include": [
    "./node_modules/@types/**/*.d.ts",
    "./src/**/*.ts"
]
}

Trough 객체를 반복하고 싶습니다.Object.entries()그래서 내부 정의를 할당했습니다."lib": [ "es2017" ]하지만 여전히, 타자기는 제가 그것을 옮기는 것을 허락하지 않습니다.

글로벌 컴파일러는 있지만 로컬 컴파일러는 없을 때 당신의 문제를 재현할 수 있습니다../node_modules.

나의 경우 컴파일러는 어떤 tsconfig.json 파일을 사용해야 하는지 알지 못합니다.특정 항목을 가리키기tsconfig.json파일 도움말:

tsc  --project ./tsconfig.json

나는 또한 추가했습니다.domlib에 대한 옵션, 왜냐하면es2017콘솔을 인식하지 못합니다.

"lib": [
    "es2017",
    "dom"
]

라이브러리 집합에 ECMA스크립트 2017(ES8) 전체 집합을 포함하지 않으려면es2017.object의 결심을 만족시키기 위해Object.entries그리고 관련이 있습니다.

다음은 최소한의 작동 예입니다.

src/index.ts

const sizeByColor = {
  red: 100,
  green: 500,
};

for (const [color, size] of Object.entries(sizeByColor)) {
  console.log(color);
  console.log(size);
}

tsconfig.json

{
  "compilerOptions": {
    "lib": ["dom", "es2016", "es2017.object"],
    "rootDir": "src",
    "target": "es6",
    "outDir": "dist"
  },
  "exclude": [
    "node_modules"
  ]
}

참고: 만약"target"으로 설정됨"es6"TypeScript는 기본적으로 다음을 사용합니다."lib"항목(지정되지 않은 경우): ["dom", "dom.iterable", "es6", "scripthost"].

설정 시 라이브러리 기본값을 덮어씁니다."lib"수동으로, 그것이 제가 추가해야 했던 이유입니다."dom"(사용할)console.log내 코드에서는) 및"es6"ES6 및 부분 ES8의 사용을 시연합니다("es2017.object").

원본: TypeScript 컴파일러 옵션

음, 주사 놓는 것을 잊어버린 것 같습니다.core-js에 폴리필.Object.entries.수입품'core-js/fn/object/entries';이 폴리필 변환은 효과가 있지만 IDE는 여전히 이에 대해 불평하고 있습니다.포함할 때@types/core-js직접적으로 IDE는 괜찮지만 "lib/es2017"의 중복 선언으로 인해 Typescript가 충돌합니다.IDE(WebStorm)가 내부의 "lib" 설정을 처리할 수 없는 것 같습니다.tsconfig.json

편집: 예, 저는 웹스톰 설정을 수정하려고 시도했고, "TypeScript 서비스(실험) 사용"을 true로 설정한 후 모든 것이 정상입니다!

이것은 저에게 효과가 있었습니다. 물론 여기서 원하는 인터페이스/유형을 변경할 수 있습니다.

 for (const [field, values] of Object.entries<any>(filters)) {

독립 실행형 Typescript 앱의 경우 lib를 추가해야 했습니다.es2019.objecttsconfig로 이동하고 폴리필을 가져와 작동합니다 :)

import 'core-js/es/object/from-entries';

언급URL : https://stackoverflow.com/questions/39741428/es7-object-entries-in-typescript-not-working

반응형