์ฐธ์กฐ(์ด๋ฏธ์ง ํฌํจ): 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[]
'๐ป๐ > ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋๋ํ๊ฒ useMemo ์ฌ์ฉํ๊ธฐ (0) | 2022.10.09 |
---|---|
[JS] JavaScript์์ HTML ์์๋ฅผ ๋ง๋๋ 3๊ฐ์ง ๋ฐฉ๋ฒ (0) | 2022.10.02 |
[React] ๋๋ํ๊ฒ useCallback ์ฌ์ฉํ๊ธฐ (0) | 2022.10.02 |
[TS] ๋น ๊ฐ์ฒด์ ๋ํ ์ฌ๋ฐ๋ฅธ ํ์ (0) | 2022.09.03 |
[react-youtube] videoId์ ๋ฐ๋ผ ์์์ด ๋ณ๊ฒฝ๋์ง ์์ ๋ (0) | 2022.09.02 |