관리 메뉴

흰둥씨의 개발장

[typescript] 유틸리티 타입(Utility type) 본문

[오늘의 공부]/typescript

[typescript] 유틸리티 타입(Utility type)

돈워리비해삐 2023. 6. 16. 03:20

Partial<T>

interface User{
	id:number;
	name:string;
	age:number;
	gender: "m" | "f";
}

/* 
let admin :User = {
	id:1,
	name:"bob",
} 
위와 같이 입력하면 age와 gender 속성을 입력하지 않아서 에러뜸 
아래와 같이 partial을 이용하면  interface의 속성에 ?: (optional)로 지정한것 과 같음  
*/

//interface User{
//	id?:number;
//	name?:string;
//	age?:number;
//	gender?: "m" | "f";
//}

let admin : Partial<User> =  {
	id:1,
	name:"bob", //age랑 gender가 없어도 에러 안뜸 
}

 


Required<T>

interface User{
	id:number;
	name:string;
	age:number;
	gender: "m" | "f";
}

let admin : Required<User> =  { // Required는 <>안에 있는 내용을 모두 입력해줘야함 
	id:1,
	name:"bob", 
	age:20,
	gender:"f"
}

 

Readonly<T>

interface User{
	id:number;
	name:string;
	age?:number;
}

let admin : Readonly<User> =  {   //Read-only속성
	id:1,
	name:"bob", //최초 할당은 가능 
} 

// admin.id = 4; 재할당 하려고 하면 에러남 admin을 Readonly 읽기전용으로 지정해서

 


Record<Key, Type>

/*
interface Score {
	"1": "a" | "b" | "c" | "d";
	"2": "a" | "b" | "c" | "d";
	"3": "a" | "b" | "c" | "d";
	"4": "a" | "b" | "c" | "d";
} 
const score :Score = {
	1:"a",
	2:"d",
	3:"c",
	4:"b",
}
위와 같은 효과를 내기위해 아래와 같이 Record<키값, 타입값>활용가능 

*/


type Grade = "1" | "2" | "3" | "4";
type Score = "a" | "b" | "c" | "d";

const score :Record<Grade, Score> = {
	1:"a",
	2:"d",
	3:"c",
	4:"b",
}
interface User {
	id:number;
	name:string;
	age:number;
}

function isValid (user:User){ //유효한값을 입력했는지 확인하는 함수 
	const result: Record<keyof User, boolean> = { //result는 User의 키를 키값으로 그대로 이용하고, 반환타입은 불린
		id : user.id >0,
		name: user.name !== "",
		age: user.age > 0,
	}
	return result;
}

 


Pick<type, key>

interface User {
	id:number;
	name:string;
	age:number;
	gender: "m" | "w";
}

const admin : Pick <User, "id" | "name"> = {  //Pick을 이용해서 User의 id와 name속성만을 취함
	id:0,
	name:'kim',
}

 


Omit<type, key>

interface User {
	id:number;
	name:string;
	age:number;
	gender: "m" | "w";
}

const admin : Omit <User, "age" | "gender"> = {  //Omit을 이용해서 User의 age와 gender속성만 빼고 이용
	id:0,
	name:'kim',
}

 


 

Exclude<Type1, Type2> 
ㄴType1에서 Type2를 제외하고 사용함 

type T1 = string | number | boolean ;
type T2 = Exclude<T1, number>;           //T2는 string | boolean 로 사용
type T3 = Exclude<T1, number | boolean>; //T3는 string만 사용

NonNullable<Type>
ㄴNull, undefined를 제외한 값을 생성함 

type T1 = string | number | boolean | void | undefined | null ;
type T2 = NonNullable<T1>; //T2는 string | number | boolean | void 사용중

 

https://www.typescriptlang.org/

 

JavaScript With Syntax For Types.

TypeScript extends JavaScript by adding types to the language. TypeScript speeds up your development experience by catching errors and providing fixes before you even run your code.

www.typescriptlang.org

 

'[오늘의 공부] > typescript' 카테고리의 다른 글

[typescript] react에 적용하기  (0) 2023.06.22
[typescript] Generic  (0) 2023.06.16
[typescript] 클래스  (0) 2023.06.15
[typescript] 리터럴과 유니온/교차 타입  (0) 2023.06.15
[typescript] 함수  (2) 2023.06.15