source

타이프스크립트 오류:TS7053 요소에는 암묵적으로 '임의' 유형이 있습니다.

ittop 2023. 3. 13. 20:52
반응형

타이프스크립트 오류: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)

사용하다suppressImplicitAnyIndexErrorstsconfig. 이 설정에 대한 자세한 내용은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

반응형