타이프스크립트 오류:TS7053 요소에는 암묵적으로 '임의' 유형이 있습니다.
이것은 내 코드의 일부입니다.
const myObj: object = {}
const propname = 'propname'
myObj[propname] = 'string'
에러가 발생했습니다.
ERROR in path/to/file.ts(4,1)
TS7053: Element implicitly has an 'any' type because expression of type '"propname"' can't be used to index type '{}'.
Property 'propname' does not exist on type '{}'.
무엇이 문제이며, 어떻게 수정해야 합니까?
개체의 인덱스 유형을 정의해야 합니다.고객님의 경우string
베이스 인덱스
const myObj: {[index: string]:any} = {}
이하에, 다음의 몇개의 해결 방법을 나타냅니다.TS7053 Element implicitly has an 'any' type
어레이 액세스를 통해 속성에 액세스할 때 오류가 발생했습니다.
원래 코드:
const myObj: object = {}
const prop = 'propname'
myObj[prop] = 'string' // Error!
주의: 인덱스 서명이 아직 정의되지 않았기 때문에 이 방법은 작동하지 않습니다.
const myObj: {propname: any} = {}
const prop = 'propname'
myObj[prop] = 'string' // Error!
해결책 1: 인덱스 시그니처의 암묵적인 정의
const myObj: {[key: string]: any} = {}
const prop = 'propname'
myObj[prop] = 'string'
해결책 2: 인터페이스를 사용하여 인덱스 시그니처를 제공하다
interface IStringIndex {
[key: string]: any
}
const myObj: IStringIndex = {}
const prop = 'propname'
myObj[prop] = 'string'
해결책 3: 인터페이스를 사용하여 유틸리티 유형을 확장합니다.
interface IStringIndex extends Record<string, any> {}
const myObj: IStringIndex = {}
const prop = 'propname'
myObj[prop] = 'string'
해결책 4: 인덱스 서명을 사용하여 유형 별칭을 정의합니다.
type MyObject = {
[key: string]: any
propname?: any
}
const myObj: MyObject = {}
const prop = 'propname'
myObj[prop] = 'string'
솔루션 5: 인덱스 시그니처를 기술하는 인터페이스와 유효한 속성을 기술하는 타입에일리어스의 조합:
interface IStringIndex extends Record<string, any> {}
type MyObject = IStringIndex & {
propname?: string
}
const myObj: MyObject = {}
const prop = 'propname'
myObj[prop] = 'string'
솔루션 6: 유효한(문자열) 속성 이름 목록을 정의합니다.
type ValidProps = 'propname' | 'value'
interface IStringIndex extends Record<ValidProps, any> {}
const myObj: IStringIndex = {
propname: 'my prop',
value: 123
}
const prop = 'propname'
myObj[prop] = 'string'
주의: 의 모든 속성ValidProps
개체를 할당할 때 목록이 있어야 합니다.
인터페이스/클래스가 정의되어 있는데도 오류가 발생하는 경우keyof
다음과 같습니다.
interface SomeInterface {
propertyA: string;
propertyB: string;
}
const object: SomeInterface = {propertyA: 'A', propertyB: 'B'};
for ( const prop in object ) {
const value = object[property]; // <-- will throw an error
const typedValue = object[property as keyof SomeInterface]; // <-- will do fine
}
그렇지 않으면 통과하는 인터페이스/클래스에 범용 속성을 추가하여 "해킹"할 수 있지만 타입 unsafety에 대해서는 전혀 다른 문이 열립니다.
interface SomeInterface {
propertyA: string;
propertyB: string;
[key: string]: any;
}
tsconfig.json으로 이동하여 다음 옵션을 설정합니다.
"compilerOptions": {
"noImplicitAny": false,
}
const listOfArray: Array<any> = [];
for(const Id in MyObject)
{
listOfArray.push(dataList[Id]);//TS7053 Error here -- Fixed by doing above things
}
결과를 푸시하려고 했을 때 같은 오류가 발생하였습니다.MyObject [{Id: value 1},{Id: 2},{Id: 3}]
.
TS 맵을 만듭니다.
const myObj = new Map();
myObj.set('propname', "something");
const propname = 'propname'
myObj.get(propname)
사용하다suppressImplicitAnyIndexErrors
tsconfig. 이 설정에 대한 자세한 내용은http://https://www.typescriptlang.org/tsconfig#suppressImplicitAnyIndexErrors 를 참조해 주세요.
JSON 오브젝트에 문제가 있었습니다.스위치 문에서는 "type" 키가 사용되며 대소문자 옵션은 문자열입니다.
이전 버전에서는 Ionic이면 충분했습니다.
var jsonMessage: JSON;
새로운 버전에서는 다음을 사용해야 했습니다.
var jsonMessage: {"type": string, "data": string};
또는
var jsonMessage: {"type": any, "data": any};
언급URL : https://stackoverflow.com/questions/56833469/typescript-error-ts7053-element-implicitly-has-an-any-type
'source' 카테고리의 다른 글
angularjs 필터에 인수 전달 (0) | 2023.03.13 |
---|---|
요소 유형이 잘못되었습니다. 문자열(내장 구성 요소) 또는 클래스/함수가 필요합니다. (0) | 2023.03.13 |
입력 타입="파일"에 이미지를 추가해 같은 형태로 송신한 후 섬네일 이미지를 생성하는 방법 (0) | 2023.03.13 |
AngularJS: ngIf를 명령어에 프로그래밍 방식으로 추가하는 베스트 프랙티스는 무엇입니까? (0) | 2023.03.13 |
Spring-Data JPA CrudRepository는 Itable을 반환합니다.목록에 캐스팅해도 될까요? (0) | 2023.03.13 |