Typescript Chapter 7 : Index signatures & keyof Assertions

2023. 11. 14. 15:40

https://www.youtube.com/watch?v=gieEQFIfgYc&t=9179s

 

 

 

 

 

 

 

 

 

 

 에러가 발생한다. 

Indexed Access Types이란?

https://www.typescriptlang.org/docs/handbook/2/indexed-access-types.html

 

이렇게 

 

element 는 함축으로 any 타입을 가지고 있다. 왜냐면  string 표현은 index type 에 사용될수 없기 때문이다. 

 

여기서도 에러가 발생한다. 

key값이 string .이라는 것을 명시하고 valuer 가 number 이라는것을 명시해야 에러가 없어진다. 

 

단점 typescript 는 미래에 어떤 이름이 들어갈지 모른다. 

 

TodaysTransactiosn 에는 dave 라는key 가 없음에도 에러가 발생하지 않고 undefined 가 발생하는 것을 볼수 있다. 

 

 이값을 inerface 에다 넣어서 이 obj 에는 pizza books job 만 key 값으로 사용한다고 명시한다. 

 

두가지만 선언하면 에러가 발생한다. 

 

 

optional chaing ==?

 

 

Optional Propery 

 name?: string ->

 속성의 값이 있어도 되고 없어도 선택적으로 받을 수 있습니다.

출처: https://powerku.tistory.com/273 [프론트엔드 연구소:티스토리]

 

 

 

number[] 값을 줘도 classes?: 는에러가 발생하는이유  위의 설명과 같이 undefined 도 나올수 있기 때문에 

 

 

 

key 값을 명시해주지 않고도 에러가 발생하지 않게 하는방법

 

 

 

 keyof 타입은 oject 타입을 받아서 string 이나 numeric literal union 의 타입으로 key 값을 배출시킨다. 

 

 

 

 

이번에는 student 이다 ( 소문자 )_

우리는 reference 하고 있는 (student )oject 타입을 알아내서 keyof을 알아내겠다. 의미이다.

student 는 Student 의;형태를 갖고 있는 것으로 여기서는 그냥 typeof  으로 하면 안되고 typeof studnet 를 해서 

type 을 뽑아내야된다. 

 

 

   [key:'salry' ] <- 이런거는 안된다. 

따라서  Record <stream ('salray','bonus','sidehustle') ,number|string> 을 넣어서  

 salary 가 number, string 이 가능하게 만든다. 

 

이렇게 가능하게 된다. 

 

하지만 

 

여기에서 또 에러가 발생한다..

 

이때도 위와 같이 keyof Incomes 을 놓으면 에러가 사라진다.