'Entries' 속성이 'ObjectConstructor' 유형에 없습니다.
저는 ng2 구현 작업을 하고 있습니다.다음 함수 호출을 사용하여 개체를 배열로 변환합니다.
var authors = Object.entries(responseObject.Authors);
이것은 표준 js 함수입니다.그러나 ts 컴파일러는 다음 오류를 반환합니다.
"Property 'entries' does not exist on type 'ObjectConstructor'"
빠른 Google에 따르면 컴파일러 옵션 대상 속성을 es5에서 es6으로 변경하는 것이 해결책인 것 같습니다.그러나 이전 문제에 대한 몇 가지 사전 조사 후 아래의 tsconfig.json에 추가 "lib" 속성을 포함함으로써 es6 기능을 활용할 수 있다고 생각했습니다.
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "commonjs",
"noEmitOnError": true,
"noImplicitAny": false,
"outDir": "../Scripts/",
"removeComments": false,
"sourceMap": true,
"target": "es5",
"moduleResolution": "node",
"lib": [
"es2015",
"dom"
]
}
또한 대상 속성을 es2015로 변경한 다음 프로젝트를 다시 빌드하고 "typecriptUsingTsConfig"를 실행했지만 여전히 동일한 오류가 발생합니다.내가 여기서 할 수 있는 일이 무엇인지 아는가?Object.entries()
기능?
당신이 변화하는 것은 매우 정확합니다.target
잘못된 접근 방식과 변화lib
는 올바른 접근 방식이지만 언어의 잘못된 버전을 지정했습니다.MDN에 따르면,Object.entries
ES 2017 사양에 공식적으로 추가되었습니다.
"lib": ["es2017"]
따라서 대신 지정해야 합니다*.
의 메서드에 대한 선언만 추가하려면Object
ES2017에 추가된 기능인 TypeScript를 사용하면 보다 세분화된 값을 지정할 수 있습니다.
"lib": ["es2017.object"]
Alexander Bird에 의해 언급된 바와 같이, 기본적으로, 의 암묵적인 값은"lib"
옵션은 다음에 대해 지정된 값에 따라 달라집니다."target"
있는 경우에는
예:
"target": "es2017"
해당 접두사가 붙습니다."lib.*"
다음을 제외하고 기본적으로 포함됩니다."lib"
명시적으로 지정됩니다.
이전 런타임에서 이 기능이 작동하도록 하려면 구현 자체의 폴리필(예: 이 폴리필)을 추가해야 합니다.
참고: 최신 버전을 지정할 수도 있습니다.
"lib": ["es2020"]
혹은 자연적으로 고른.
"lib": ["esnext"]
마지막에는 TypeScript 언어에 알려진 최신 표준 라이브러리 기능에 대한 선언이 포함됩니다.이동하는 대상을 나타내므로 이 옵션은 해당 런타임을 모두 폴리필하는 것은 정의상 연구가 필요하고 대상 런타임에 따라 다른 폴리필을 로드해야 할 수 있는 복잡한 작업이므로 주의하여 사용해야 합니다.
또한, 스지의특의 ."lib"
옵션을 사용하면 런타임과 일치하도록 여러 값을 결합할 수 있습니다.예를 들어, 2015 지원 웹 브라우저를 폴리필에서 제공하는 이러한 개체 메서드의 추가와 일치시키려면 다음과 같이 기록할 수 있습니다.
"lib": ["es2015", "es2017.object", "dom"]
자세한 내용은 TypeScript 핸드북을 참조하십시오.
참고: 일부 의견제출자가 변경하는 것이 잘못된 이유를 물었습니다.--target
에 --lib
둘 다 코드가 체크를 입력할 수 있게 해줄 것처럼?는 그는이 때문입니다.--target
코드가 전치되는 방식을 변경합니다.를 들면, 들면를예,"target": "es2017"
는 것을 의미합니다.async
이전 런타임에서는 함수가 변환되지 않습니다.출력 구문을 변경하는 것이 아니라 추가 라이브러리를 사용할 수 있도록 하는 것이 목적이었기 때문에 구문 기능과 라이브러리 기능을 구분하는 것이 중요하기 때문에 잘못된 것입니다.
승인된 답변은 나에게 효과가 없었지만, 나는 'assign' 속성의 답변이 다음과 같이 'ObjectConstructor' 유형에 존재하지 않습니다.
const changedFields = (<any>Object).entries(this.ngForm.form.controls)
.filter(value => value[1].dirty);
동일한 상황에 처한 모든 사용자를 위한 공유
"tsconfig.json"으로 이동하여 다음을 추가합니다.
"lib": ["es2019"];
언급URL : https://stackoverflow.com/questions/45422573/property-entries-does-not-exist-on-type-objectconstructor
'programing' 카테고리의 다른 글
PowerShell에서 동적으로 변수 생성 (0) | 2023.08.10 |
---|---|
정적 Mac OS XC 빌드 생성 (0) | 2023.08.10 |
JQuery UI 대화 상자의 내용에 맞게 자동으로 확장 또는 축소 (0) | 2023.08.10 |
APN Device Token은 각 앱마다 고유합니까? (0) | 2023.08.10 |
Angular 9 + CLI(TypeScript) - .spec.ts 테스트 파일 생성을 중지하는 방법 (0) | 2023.08.10 |