Union type
|
์ฐ์ฐ์๋ก ์ฌ๋ฌ ๊ฐ์ ํ์
์ด ์ฐ๊ฒฐ๋ ํ์
์ ์๋ฏธํ๋ค. ์ด๋ |
์ฐ์ฐ์๋ or์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ฌํ Union type์ ํ์ฉํด ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ ์ ํ๋ค.
๋ฌธ์ ์ ์
interface Props {
data: LectureRoomsPerBuilding | LectureRoomInfo;
children?: LectureRoomInfo[];
}
๋ค์๊ณผ ๊ฐ์ด ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๋๋ฐ, ํ์ ์ถ๋ก ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
export interface LectureRoomInfo {
room_name: string;
room_uid: RoomUID;
}
export interface LectureRoomsPerBuilding {
building_name: string;
building_uid: number;
rooms: LectureRoomInfo[];
}
์๋ฌ๊ฐ ๋ฐ์ํ ์ฝ๋๋ data.room_name
data.building_name
์ด์๋ค. "LectureRoomsPerBuilding์ room_name ํ๋กํผํฐ๋ฅผ ํฌํจํ์ง ์๋๋ค." "LectureRoomInfo๋ building_name ํ๋กํผํฐ๋ฅผ ํฌํจํ์ง ์๋๋ค." ๋ผ๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ํ์ธํ ์ ์์๋ค. or์ ์๋ฏธํ๋ | ์ฐ์ฐ์๋ก ๋ ํ์
์ ์ฐ๊ฒฐ ํ์ผ๋ ๋ ์ธํฐํ์ด์ค์ ํ๋กํผํฐ๋ค์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์๊ฑฐ๋ผ ์๊ฐํ๋๋ฐ ๋ด ์์์ด ํ๋ ธ์๋ค.
Union Type์ ๋ํด ๊ตฌ๊ธ๋งํ ๊ฒฐ๊ณผ ์ด์ ๊ด๋ จ๋ ์๋ฃ๋ฅผ ์ฐพ์ ์ ์์๋ค.
Union Type ์ฌ์ฉ ์ ์ฃผ์์
https://joshua1988.github.io/ts/guide/operator.html#intersection-type
interface Person {
name: string;
age: number;
}
interface Developer {
name: string;
skill: string;
}
function introduce(someone: Person | Developer) {
someone.name; // O ์ ์ ๋์
someone.age; // X ํ์
์ค๋ฅ
someone.skill; // X ํ์
์ค๋ฅ
}
ํ์ ์คํฌ๋ฆฝํธ ์ ์ฅ์์๋ introduce ํจ์ ์คํ ์ ์ธ์๋ก Person์ด ์ฌ ์ง, Developer๊ฐ ์ฌ ์ง ์ ์ ์๋ค. ๋ฐ๋ผ์ ๋ ์ค ์ด๋ ํ์ ์ด ์๋ ์ค๋ฅ๊ฐ ๋์ง ์๋ ๋ฐฉํฅ์ผ๋ก ํ์ ์ ์ถ๋ก ํ๋ค. ๊ฐ๋ น ์ธ์๋ก Developer ํ์ ์ด ์จ๋ค๋ฉด someone.age ๋ผ๋ ์ฝ๋๋ ์๋ฌ๋ฅผ ๋ฐ์์ํค๊ธฐ ๋๋ฌธ์ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๋ฏธ๋ฆฌ ์๋ฌ๋ฅผ ๋์ฐ๋ ๊ฒ์ด๋ค.
ํ์ ๊ฐ๋
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ์ ๊ฐ๋๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
ํ์ ๊ฐ๋๋? ํจ์ ๋ด์์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํด ํ์ ์ ์ขํ๋ ๊ฒ
function Hello(user: string|number){
if (typeof user === 'string'){
// ํ์
์ string์ผ๋ก ์ขํ๋ค
console.log(`Hello ${user}`);
}
console.log(`Hello ${users[user]}`);
}
ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- typeof: ์์ ์๋ฃํ๋ง ๊ตฌ๋ถํ ์ ์๋ค.
- in: ๊ฐ์ฒด์ ํน์ ํ๋กํผํฐ๊ฐ ์กด์ฌํ๋์ง๋ฅผ ํ์ธํจ์ผ๋ก์จ ํ์ ์ ์ขํ๋ค.
๋๋ LectureRoomInfo
์ LectureRoomsPerBuilding
์ ๊ตฌ๋ถํด์ผ ํ๊ธฐ ๋๋ฌธ์, ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
ํ์ ๊ฐ๋๋ฅผ ์ ์ฉํ ํจ์
const updateLectureRoomChoice = () => {
if ('room_name' in data) {
setLectureRoomChoice({
building_uid: data.building_uid,
room_uid: data.room_uid,
});
}
};
props data
์ room_name
ํ๋กํผํฐ๊ฐ ์กด์ฌํ๋ค == data
๊ฐ LectureRoomInfo
ํ์
์ด๋ค. == ์๋ธ๋ฉ๋ด์ ํด๋นํ๋ค.
์ ๋ฒ ๊ธ์์๋ ๋ฉ์ธ๋ฉ๋ด์ ์๋ธ๋ฉ๋ด๋ฅผ children props์ ์ฌ๋ถ๋ก ๊ตฌ๋ถํ์๋๋ฐ, ์ด๋ ๊ฒ ํ์ ๊ฐ๋๋ฅผ ํ์ฉํด ๊ตฌ๋ถํ ์๋ ์์๋ค. ๋ค๋ง ํ์ ๊ฐ๋์ ๊ฒฝ์ฐ jsx์์ ๊ณง๋ฐ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก UI์์๋ children props์, ํจ์ ๋ด์์๋ ํ์ ๊ฐ๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ํํด์ผ๊ฒ ๋ค.
์ ์์์ฒ๋ผ data์ ํ๋กํผํฐ์ ์ ๊ทผํ๋ ํจ์๋ค์ ๋ชจ๋ ํ์ ๊ฐ๋๋ฅผ ์ ์ฉํด ์คฌ๋๋ ์๋ฌ๊ฐ ํด๊ฒฐ๋์๋ค!
'ํ๋ก์ ํธ ๊ธฐ๋ก > YSS | ์ฐ์ธ๋ํ๊ต ๊ณต๊ฐ๋๊ด ์๋น์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฌ์ด๋๋ฐ ๊ตฌํํ๊ธฐ | UI (0) | 2022.09.18 |
---|---|
ํ ์ด ํ๋ก์ ํธ๋ฅผ ์ํ css ๋ฐฉ์ ๊ฒฐ์ ํ๊ธฐ (0) | 2022.08.10 |