본문 바로가기

개발하자

유형 스크립트: 형식 'string' 표현식을 사용하여 형식을 인덱싱할 수 없으므로 요소에 암시적으로 'any' 형식이 있습니다.

반응형

유형 스크립트: 형식 'string' 표현식을 사용하여 형식을 인덱싱할 수 없으므로 요소에 암시적으로 'any' 형식이 있습니다.

다음 오류를 해결할 수 있는 방법을 찾기 위해 리액트 앱을 JavaScript에서 TypeScript로 변환하고 있습니다.

형식 'string' 식을 사용하여 'Schedule' 형식을 인덱싱할 수 없으므로 요소에 암시적으로 'any' 형식이 있습니다. 'Schedule' 유형에서 매개 변수가 'string'인 인덱스 서명을 찾을 수 없습니다.

이게 암호야...

  export interface Schedule {
    display: Display;
    monday: Day;
    tuesday: Day;
    wednesday: Day;
    thursday: Day;
    friday: Day;
    saturday: Day;
    sunday: Day;
  }

  export interface Diary {
    schedule: Schedule;
    appointments: Array<Appointment>;
  }

 // ...

 const dayKey: string = 'monday'
 const day: Day = diary.schedule[dayKey]  // <-- Here is the error

 // ...

이전에 자바스크립트에서 작업하던 데이터 구조가 json에 불과했기 때문에 이것은 매우 효과적이었지만, 나는 TypeScript로 같은 것을 얻는 방법을 이해하는 데 어려움을 겪고 있다.

감사해요.




TypeScript의 키워드를 사용할 수 있습니다.

const dayKey: keyof Schedule = 'monday'



const dayKey: string = 'monday';

이것에 대한 유형은 , 이것은 너무 일반적입니다. 모든 문자열에 예약 개체에 항목이 있는 것은 아닙니다. 당신과 나는 당신이 접근할 수 있는 유일한 가능성이 있다는 것을 알고 있지만, 그것은 타이프스크립트가 사용하는 유형 정보에서는 사용할 수 없다.

더 구체적인 유형의 여러 옵션이 있습니다. 예약에서 키 중 하나로 지정할 수 있습니다.

const dayKey: keyof Schedule = 'monday';

아니면 당신은 그것이 특정한 것이라고 지정할 수 있다.

const dayKey: 'monday' = 'monday';

이를 구체적으로 지정하는 또 다른 방법은 다음과 같습니다. 이 방법은 활자를 추론하는 것을 담당하지만 가능한 한 엄격하게 추론하도록 지시합니다.

const dayKey = 'monday' as const;



특정 데이터 유형을 사용하는 것을 선호하지만 동적 응답을 받는 경우에는 다음과 같이 선언할 수 있습니다.

let obj = Array<any>()

반응형