TypeScript : Element implicitly has an 'any' type because expression of type 'string' can't be used to index
타입스크립트 에러가 발생했다. 실행에는 문제가 없었지만 빨간 줄이 너무 거슬렸다.
1 | const CONN_STATE = { |
TS7053: Element implicitly has an ‘string’ type because expression of type ‘string’ can’t be used to index type ‘{ 1: string; 2: string; 3: string; 4: string; }’.
index signature 관련 에러였다.
Index Signature
Javascript에서 Object에 문자열로 접근할 수 있다. 이 때 암묵적으로 toString
을 호출하기 때문에 Typescript는 이 때 오류를 발생시킨다.
1 | let obj = { |
에러를 보면 알 수 있다. Typescript에서 index signature는 string
또는 number
여야 한다. (symbols
도 사용할 수 있다고 한다.) Typescript는 index signature를 명시할 수 있도록 한다.
1 | let foo:{ [key:string] : {message: string} } = {}; |
여기서 index signature의key
는 Typescript에서 가독성을 위해 넣는 아무 의미 없는 문자열이다. index
라던지 username
라던지 아무 이름이나 넣어도 상관없다.
위의 에러는 index signature를 따로 명시하지 않기 때문에 객체 내부의 string literal을 key로 받게 되어있는데 string으로 객체에 접근하려고 해서 발생한 것이다.
해결 방법
객체에 index signature
를 명시함으로써 해결 할 수 있다.
1 | type ConnState = 1 | 2 | 3 | 4; |
참고
이 블로그의 모든 글은 CC BY-NC-SA 4.0 라이선스를 따르며, 별도로 명시되지 않는 한 모든 권리를 보유합니다. 재배포 시 출처를 명시해 주세요: StudyYeong.