๐Ÿ’ป๐Ÿ’€/๊ฐœ๋ฐœ

[TS] ์œ ํ‹ธ๋ฆฌํ‹ฐ ํƒ€์ž…๋“ค

db2 2022. 10. 9. 23:45

์ฐธ์กฐ(์ด๋ฏธ์ง€ ํฌํ•จ): Do You Really Know These 6 TypeScript Utilities?

1. Pick

Pick์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฃผ์–ด์ง„ ํƒ€์ž…์—์„œ ์›ํ•˜๋Š” ํ‚ค๋“ค์„ ๊ณจ๋ผ ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

interface User {
  id: number;
  firstName: string;
  lastName: string;
  age: number;
  phone: string;
}

type UserName = Pick<User, 'firstName' | 'lastName'>;
/* 
(์œ„์™€ ๋™์ผ)
interface UserName {
  firstName: string;
  lastName: string;
}
*/

const userName: UserName = {
    firstName: 'Gildong',
    lastName: 'Hong'
}

2. Omit

Pick๊ณผ ๋ฐ˜๋Œ€๋กœ, Omit์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฃผ์–ด์ง„ ํƒ€์ž…์—์„œ ์›ํ•˜๋Š” ํ‚ค๋“ค์„ ์ œ๊ฑฐํ•ด ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

interface User {
  id: number;
  firstName: string;
  lastName: string;
  age: number;
  phone: string;
}

type UserName = Omit<User, 'id' | 'age' | 'phone'>;
/* 
(์œ„์™€ ๋™์ผ)
interface UserName {
  firstName: string;
  lastName: string;
}
*/

const userName: UserName = {
    firstName: 'Gildong',
    lastName: 'Hong'
}

3. Partial

Partial์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฃผ์–ด์ง„ ํƒ€์ž…์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๋“ค์ด ์˜ต์…˜์œผ๋กœ ์„ค์ •๋œ ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

interface UserName {
  firstName: string;
  lastName: string;
}

const userName: Partial<UserName> = {
    firstName: 'Gildong',
}

Partial<UserName> ํƒ€์ž…์€ ์•„๋ž˜์™€ ๋™์ผํ•˜๋‹ค.

interface UserName {
  firstName?: string;
  lastName?: string;
}

4. Readonly

Readonly๋Š” ์ฃผ์–ด์ง„ ํƒ€์ž…์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ์ดˆ๊ธฐํ™” ์ดํ›„์— ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์ด ์žฌํ• ๋‹น๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

interface UserName {
  firstName: string;
  lastName: string;
}

const userName: Readonly<UserName> = {
    firstName: 'Gildong',
    lastName: 'Hong'
}

userName.lastName = 'Lee'; // ์—๋Ÿฌ Cannot assign to 'lastName' because it is a read-only property.

5. ReturnType

ReturnType์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’ ํƒ€์ž…์„ ์ถ”์ถœํ•ด ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

function createUser(): User {
    return {
        firstName: 'Gildong',
        lastName: 'Hong'    
    }
}

// UserName === User
type UserName = ReturnType<typeof createUser>;

6. NonNullable

NonNullable์€ ์ฃผ์–ด์ง„ ํƒ€์ž…์—์„œ ๊ฐ’์ด null์ด๊ฑฐ๋‚˜ undefined์ธ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ๊ฑฐํ•ด ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

type Strs = string | string[] | null | undefined;

type NotNullOnlyStrs = NonNullable<User>; // string | string[]