함수 타입
호출 시그니처가 없다라는 에러가 발생했습니다.
(호출 시그니처 = 함수 타입)
한번만 사용하여 굳이 interface로 만들 필요가 없다면
요로코롬 만들면 됩니다.
인덱스 가능 타입
주로 배열데이터 타입을 지정합니다.
배열
item의 값은 number 타입이며, 그 속성의 값은 string 이다.
라고 작성을 한 Fruits 인터페이스 입니다.
객체
위에서 만들어진 User interface는
[prop : string] : unknown 가 있습니다
이는 대괄호 표기법에 string 타입으로 prop를 받으며, 값의 타입은 unknown입니다.
prop에 따라 값의 타입은 바뀌기 때문에 unknown입니다.
Jplum 이라는 객체에 대괄호 표기법 (문자 데이터로)인덱싱하여 값을 할당했습니다.
다른 예제
마지막의 logValues에서 에러가 발생했습니다.
Jplum은 User 인터페이스의 구조에 맞게 잘 작성 되어있습니다.
에러가 뜨는 이유는..?
logValues 에는 Payload 형식이 들어가야 합니다.
Payload는 인덱스 가능한 타입의 구조이지만 User는 그렇지 않습니다.
User 인터페이스도 이제 인덱스 가능한 타입으로 만들어져 오류가 사라졌습니다.
이렇게 인덱스가 가능한 타입인지 아닌지에 따라서 사용할 수 있거나 없습니다.
인덱스가 가능한 타입의 객체를 요구 할 경우 그에 맞게 인덱스가 가능해야 합니다.
정리하면
logValues는 payload 라는 인수를 받습니다. payload는 Payload의 구조를 가지고 있습니다.
(Payload는 인덱스를 사용할 수 있습니다.)
logValues 에 들어갈 인수(payload)는 인덱스가 가능해야 하며, User 는 인덱스가 불가능합니다.
Jplum은 User 인터페이스의 구조이며, logValues에 Jplum을 넣었을 때 에러가 발생하였습니다.
(User 인터페이스는 현재 인덱스가 불가능한 상태)
User 인터페이스에 인덱스 시그니처 내용을 추가하여 인덱스가 가능하게 만들었고
에러가 사라졌습니다.
'JavaScript > TypeScript' 카테고리의 다른 글
[TypeScript] 타입 별칭 / 별칭과 인터페이스의 차이점 (0) | 2023.04.09 |
---|---|
[TypeScript] 인터페이스 - 상속 (1) | 2023.04.09 |
[TypeScript] 인터페이스 (1) | 2023.04.09 |
[TypeScript] 타입 가드 (3) | 2023.04.08 |
[TypeScript] 타입 단언 / 할당 단언 (0) | 2023.04.07 |