Partial

Partial 타입은 모든 프로퍼티들을 optional 하게 변경 한다.

interface User {
		id: string;
		password: string;
		email: string;
		address: string;
}

// 모든 프로퍼티가 필수이다.
const user1: User = {
		id: 'chojs28',
		password: '1234',
		email: '[email protected]',
		address: 'earth',
};

// 모든 프로퍼티가 선택적이다.
const user2: Partial<User> = {
		id: 'jjcs735',
		password: '1234',
};

Pick

Pick 타입은 지정한 프로퍼티만 사용한다.

interface User {
		id: string;
		password: string;
		email: string;
		address: string;
}

// id, password 프로퍼티 필수 (그 외는 사용할 수 없음)
const user1: Pick<User, "id", "password"> = {
		id: 'chojs28',
		password: '1234',
};

Omit

Omit 타입은 지정한 프로퍼티를 제외하고 사용한다.

interface User {
		id: string;
		password: string;
		email: string;
		address: string;
}

// email, password를 제외한 프로퍼티 필수
const user1: Omit<User, "email", "password"> = {
		id: 'chojs28',
		password: '1234',
};

Optional

Optional은 Partial, Pick, Omit을 활용해 만든 타입으로, 지정한 프로퍼티를 optional 하게 만든다.

type Optional<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;

interface User {
		id: string;
		password: string;
		email: string;
		address: string;
}

// email, address 프로퍼티는 optional이며, 그 외는 필수
const foo = (props: Optional<User, "email" | "address">) => {
		console.log(props);
}

foo({
		id: 'chojs28',
		password: '1234',
		email: '[email protected]',
});