조건문으로 타입 만들기 & infer

크롱·2023년 8월 2일
0

TypeScript

목록 보기
22/25

💈 Type 조건문

extends를 사용하여 조건식을 만들어봅시다.

		👇파라미터
type Age<T> = T;
let 나이 :Age<string> //나이 변수는 string 타입됨.
  
    
   
------------------------------------------

 파라미터로 string을 집어넣으면 strig 남겨주시고
 그게 아니면 unknown으로 해주세요
 
 
type New<T> = T extends string ? string: unknown
 		extends👉T라는 typestring 속성을 가지고 있나요?
          
let a :New<string>

         

예제 -
파라미터로 array 자료를 입력하면 array의 첫 자료의 타입을 그대로 남겨주고, array 자료가 아니라 다른걸 입력하면 any 타입을 남겨주는 타입은 어떻게 만들면 될까요?

let age1 :FirstItem<string[]>;
let age2 :FirstItem<number>; 

이러면 age1의 타입은 string, age2의 타입은 any가 되어야합니다.

답:

type FirstItem<T> = T extends any[] ? T[0] : any 


👩 infer

조건문에서 쓸 수 있는 infer키워드
타입을 왼쪽에서 뽑아줍니다.



type Person<T> = T extends infer R ? R : unknown; 
				     	  👉 왼쪽(T)에서 타입 뽑아서 R 변수에 담아주세요

type 새타입 = Person<string> // 새타입은 string 타입입니다 
  
  

실용적인 예제

			  	👉 T -> boolean[]
type 타입추출<T> = T extends (infer R)[] ? R : unknown; 
					        	 👉 R -> Boolean

type NewType = 타입추출< boolean[] >
// NewType 은 boolean 타입입니다 

const ff: NewType = false;


함수를 넣으면 함수의 return 타입만 뽑고싶다면

				
type 타입추출<T> = T extends ( ()=> infer R ) ? R : unknown; 		
👉 T ->  ()=>void , R -> void

type NewType = 타입추출< () => void > // NewType은 void 타입입니다 
  
  ---------------------------
예약어가 있어요.
  
type b = ReturnType<()=>void>
b는 void
profile
👩‍💻안녕하세요🌞

0개의 댓글