๐๏ธ ์ ๋์ธ (Union)
์ ๋์ธ์ ๊ฒฐํฉ, ์ฐํฉ๊ณผ ๊ฐ์ ๋ป์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ํ์ ์คํฌ๋ฆฝํธ์์์ ์ ๋์ธ์ ๋ ์ด์์ ํ์ ์ ํ์ฉํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
`|` ๊ธฐํธ๋ฅผ ์ฌ์ฉํด์ ์ฌ๋ฌ ํ์ ์ ํ๋๋ก ๊ฒฐํฉํ ์ ์์ต๋๋ค.
์๋ ์์์ ๊ฐ์ด 'number | string' ํ์ ์ ๊ฐ์ง ์ ์๋ ๋ณ์๋ฅผ ์ ์ํ๋ฉด, ์ด ๋ณ์๋ ์ซ์์ ๋ฌธ์ ๋ชจ๋๋ฅผ ํ ๋นํ ์ ์๊ฒ ๋ฉ๋๋ค.
let physicist : number | string;
physicist = "Marie Curie";
physicist = 86;
๊ฐ์ด ์ ๋์ธ ํ์ ์ผ ๋ ํ์ ์คํฌ๋ฆฝํธ๋ ์ ๋์ธ์ผ๋ก ์ ์ธํ ํ์ ์ ์กด์ฌํ๋ ๋ฉค๋ฒ์ ์์ฑ์๋ง ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ทธ ์ธ์ ํ์ ์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ํ์ ๊ฒ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
physicist๋ number | string ํ์ ์ผ๋ก ๋ ๊ฐ์ ํ์ ์ ๋ชจ๋ ์กด์ฌํ๋ toString()์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง, toUpperCase()์ toFixed()๋ ๊ฐ๊ฐ number/string ํ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐๏ธ ๋ด๋ก์ (Narrowing)
๋ด๋ก์์ ํ์ ์คํฌ๋ฆฝํธ์์ ๋ณ์์ ํ์ ์ ์ขํ๋๊ฐ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฃผ๋ก ์กฐ๊ฑด๋ฌธ์ด๋ ๊ฐ ํ ๋น์ ํตํ ๋ด๋ก์์ด ์์ผ๋ฉฐ, ๊ฐ์ฅ ํํ๊ฒ๋ typeof ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ์์๊ฐ ์์ต๋๋ค.
๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ typeof์ ์์๋ฅผ ๋ค์ด๋ณผ๊ฒ์.
์๋ ์ฝ๋์ ๊ฐ์ด if ๋ฌธ์์ typeof researcher๊ฐ 'string'์ธ์ง ํ์ธํด์ ํ์ ์คํฌ๋ฆฝํธ์ researcher ํ์ ์ด string์์ ๋ํ๋ ๋๋ค.
let researcher = Math.random() > 0.5
? "Frida Kallio"
: 60;
if (typeof researcher === "string") {
researcher.toUpperCase(); // Ok: string
}
๐๏ธ ๋ฆฌํฐ๋ด ํ์ (Literal Type)
๋ฆฌํฐ๋ด ํ์ ์ ์ข ๋ ๊ตฌ์ฒด์ ์ธ ๋ฒ์ ์ ์์ ํ์ ์ผ๋ก๋ ๋ณผ ์ ์๋๋ฐ, ๊ฐ ์์ฒด๋ฅผ ํ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๊ฐ๋จํ ์ฝ๋๋ก ์ดํด๋ณด๋ฉด, philosopher๋ ๋ฑ ๋ณด๊ธฐ์ string ํ์ ์ด์ง๋ง ๋จ์ง string ํ์ ์ด ์๋ "Hypatia"๋ผ๋ ํน๋ณํ ๊ฐ์ ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ๋ฆฌํฐ๋ด ํ์ ์ ๊ฐ๋ ์ ๋๋ค.
const philosopher = "Hypatia";
boolean, null, undefined ํ์ ์ธ์ number, string๊ณผ ๊ฐ์ ๋ชจ๋ ์์ ํ์ ์๋ ๋ฌดํํ ๋ฆฌํฐ๋ด ํ์ ์ด ์์ต๋๋ค.
boolean์ true | false ์ ๋ฆฌํฐ๋ด ํ์ ์ ๊ฐ์ง์ ์๊ฒ ๊ณ , number๋ 0 | 1 | 2... ๋ฑ๋ฑ ์๋ง์ number ๊ฐ์ ๋ฆฌํฐ๋ด ๊ฐ์ผ๋ก ๊ฐ์ง์ ์๊ฒ ์ฃ .
์ ๋์ธ ํ์ ์์ ๋ฆฌํฐ๋ด๊ณผ ์์ ํ์ ์ ์์ด์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์๋ ์์ ์ฝ๋์ ๊ฐ์ด lifespan์ number ํ์ ๋ ๋๊ณ 'ongoing' ๊ฐ์ผ๋ก๋ ๋ํ๋ผ ์ ์์ต๋๋ค.
let lifespan: number | "ongoing" | "uncertain";
lifespan = 80; //Ok
lifespan = "ongoing" //Ok
๐๏ธ ํ์ ๋ณ์นญ (Type Alias)
๊ฐ๋ ๋ฐ๋ณต์ ์ด๊ณ , ์ ๋ ฅ์ด ๊ธด ์ ๋์ธ ํ์ ์ ์ฌ์ฉํด์ผ ํ ๋๋ฅผ ๋ง์ฃผํ ์๋ ์๋๋ฐ ์ด๋ฅผ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ๋๋ก ๋๋ ๊ฒ์ด ํ์ ๋ณ์นญ์ ๋๋ค.
์๋ ๋๊ฐ์ง ์ฝ๋๋ฅผ ๋น๊ตํ์ ๋, ์ด๋ค ์ฝ๋๊ฐ ๋ ๊ฐ๋จํด ๋ณด์ด์๋์? (?)
๋น์ฐํ ํ์๊ฒ ์ฃ . ์ด๋ ๊ฒ ๊ธด ์ ๋์ธ ํ์ ์ ํ์ ๋ณ์นญ์ ์ฌ์ฉํ๋ฉด ํจ์ฌ ๋ ๊ฐ๊ฒฐํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
let rawDataFirst: boolean | number | string | null | undefined;
let rawDataSecond: boolean | number | string | null | undefined;
let rawDataThird: boolean | number | string | null | undefined;
type RawData = boolean | number | string | null | undefined;
let rawDataFirst: RawData;
let rawDataSecond: RawData;
let rawDataThird: RawData;
ํ์ ๋ณ์นญ์ ๊ฒฐํฉ๋ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ์๋์ ๊ฐ์ ์ฝ๋๋ ์์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
type Id = number | string;
//IdMaybe์ ํ์
์ number | string | undeffined | null
type IdMaybe = Id | undefined | null;
์ถ์ฒ: ๋ฌ๋ ํ์ ์คํฌ๋ฆฝํธ
'TIL > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด (2) | 2023.12.07 |
---|---|
ํ์ ์์คํ (Type System) (1) | 2023.12.01 |