any < unknown < union
๊ฐ์ธ์ ์ผ๋ก TS ๊ฐ JS ์ ๊ฐ์ฅ ํฐ ์ฐจ๋ณ์ ์ ๋๊ณ ์๋ ๋ถ๋ถ์ด๋ผ ํจ์, ๋ฐ์ดํฐ์ ํ์์ "๋ช ์"ํ ์ ์๋ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํ๋ค.
๋ฐ์ดํฐ์ ํ์ ์ด "๋ฐํ์"์ ๊ฒฐ์ ๋๋ JS์ ๋ฌ๋ฆฌ TS๋ ์ปดํ์ผ ๊ณผ์ ์์ ํ์ ์ด ์ ํด์ง๊ธฐ ๋๋ฌธ์, ๋ณดํต์ TS์์ ๊ฐ ๋ฐ์ดํฐ์ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ง์ ํด ์ฃผ์ง๋ง,
์ด์ฉ ์ ์์ด ๊ฐ๋ณ์ ์ธ ํ์
์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด any๋ฅผ ์ฐ๊ธฐ๋ณด๋ค๋ unknown์ ์ฌ์ฉ๋๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ , ๊ฐ๋ณ์ ์ธ ํ์
์ ์ผ์ผ์ด ์ ์ํ ์ ์๋ค๋ฉด union ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ผ ์ข์ ๋ฐฉ์์ด๋ผ๋ ์๊ฐ์ด ๋ ๋ค.
๋ฌผ๋ก ๊ฐ์ธ์ ์ธ ์๊ฐ์ด๋ค.
any
TS ์์ any ํ์ ์ ๋ชจ๋ ํ์ ์ ์ํผ ํ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ด๋ค ํ์ ์ ๊ฐ์ด๋ ์ ์ฅํ ์ ์๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
JS ์ object ํ์ ๊ณผ ๊ฐ์ ์ต์์ ํ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค.
any ์ฌ์ฉ ์ฌ๋ก
let anything: any;
anything = 5;
anything = 'Hello';
anything = { id: 1, name: 'John' };
anything ์ด๋ผ๋ ์๋ณ์์ ํ์ ์ any๋ก ๋ช ์ํด์ฃผ์๋ค.
๋ฐ๋ผ์ ์ฌํ ๋น์ ํตํด ์ซ์ / ๋ฌธ์ / object์ ๋ชจ๋ ํํ๊ฐ ์ ์์ ์ผ๋ก ๋ด์์ง๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
TS ์์ any ๋ฅผ ์ฌ์ฉํจ์ ๋ํ์ฌ
์ฐ๋ฆฌ๊ฐ TS ๋ฅผ ์ฌ์ฉํ๋ ์ฃผ๋ ์ด์ ์ ๋ชฉ์ ์ค์ ํ๋๋ ํ๋ก๊ทธ๋จ์ ํ์ ์์ ์ฑ์ ํ๋ณดํ๊ธฐ ์ํ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ, any ํ์ ์ ๊ทธ ๋ชฉ์ ์ฑ์์ ์กฐ๊ธ ๋ฒ์ด๋ ๋๋์ด ๋ ๋ค.
any ํ์ ์ ์ฝ๋์ ์์ ์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ ์ ํดํ ์ ์๋ค๊ณ ํฉ๋๋ค.
unknown
any์ ๋์ฒด์
unknown ํ์ ์ any ํ์ ๊ณผ ๋น์ทํ ์ญํ ์ ํ์ง๋ง ๋ ์์ ํ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
unknown ํ์ ์ ๋ณ์์๋ any์ ๊ฐ์ด ๋ชจ๋ ํ์ ์ ๊ฐ์ ์ ์ฅํ ์ ์์ด์.
ํ์ง๋ง, ๊ทธ ๊ฐ์ ๋ค๋ฅธ ํ์ ์ ๋ณ์์ ํ ๋นํ๊ธฐ ์ํด์ ๋ช ์์ ์ผ๋ก ํ์ ์ ํ์ธํด์ผ๋ง ํ๋ค.
unknown ์ฌ์ฉ ์ฌ๋ก
์๋ณ์์ ํ์ ์ unknown์ผ๋ก ์ง์ ํด์ฃผ๊ณ , ํ ๋นํ๋ ๊ฐ์ ๋ฌธ์์ด๋ก ํ ๋นํ๋ค.
let unknownValue: unknown = '๋๋ ๋ฌธ์์ด';
console.log(unknownValue); // ๋๋ ๋ฌธ์์ด
let stringValue: string;
stringValue = unknownValue; // ์๋ฌ ๋ฐ์! unknownValue๊ฐ string์์ด ๋ณด์ฅ์ด ์๋จ
stringValue = unknownValue as string;
console.log(stringValue); // ๋๋ ๋ฌธ์์ด
๋ฌธ์์ด๋ก ์ง์ ํ ์๋ณ์์ ์์ ๋ฌธ์์ด์ ํ ๋นํ ์๋ณ์์ ๋ฑํธ์ฐ์ฐ์๋ฅผ ํตํด ๋ฌธ์์ด์ ๋ด๊ณ ์๋ unknown ๋ฐ์ดํฐ๋ฅผ ํ ๋นํ๋ค๋ฉด,
error๊ฐ ๋ฐ์์ด ๋๋ค.
๋ค๋ง, unknown์ alias๋ก ๋ฌธ์์ด์ด๋ผ๊ณ ๋ช ์์ ์ผ๋ก ํํํด์ค๋ค๋ฉด, ์ ์์ ์ผ๋ก ํ ๋น์ด ๋๊ณ , console.log์๋ ์ถ๋ ฅ๊ฐ์ด ์ ์์ ์ผ๋ก ํ ๋นํ ๋ฌธ์์ด ๊ฐ์ด ๋์ค๋๊ฒ์ ํ์ธ ํ ์ ์๋ค.
๊ทธ๋์ unkwown ํ์ ์ ๋ณ์๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ๋ ค๋ฉด ํ์ ๋จ์ธ์ ํตํด ํ์ ๋ณด์ฅ์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
์์ alias๋ฅผ ํตํ ๋ช ์์ ํํ์ด ํ์ ๋จ์ธ ์ด๋ค.
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ typeof ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
let unknownValue: unknown = '๋๋ ๋ฌธ์์ด';
let stringValue: string;
if (typeof unknownValue === 'string') {
stringValue = unknownValue;
console.log('unknownValue๋ ๋ฌธ์์ด');
} else {
console.log('unknownValue๋ ๋ฌธ์์ด์ด ์๋๋ค');
}
typeof ํค์๋๋ฅผ ์ด์ฉํด์ ๋ฏธ๋ฆฌ ํ์
์ ์ฒดํฌํ ํ,
unknown ํ์
์ ๋ณ์๋ฅผ string ํ์
์ ๋ณ์์ ํ ๋นํ ์ ์๋ค.
unknown ์ ํ๊ณ
unknown ํ์ ์ด ๊ทธ๋๋ง ์ฌํ ๋น์ ํ ๋ ํ์ ์ฒดํฌ๊ฐ ๋์ด์ ์์ ํจ์ ๋ณด์ฅํ ์ ์๋ค.
๋ค๋ง, unknown ํ์ ๋ ๊ฒฐ๊ตญ ์ฌํ ๋น์ด ์ผ์ด๋์ง ์์ผ๋ฉด ํ์ ์์ ์ฑ์ด ๋ณด์ฅ์ด ๋์ง ์๋ ๋ค๋ ํน์ง์ด ์กด์ฌํ๋ค.
union
์ด๋ด ๋๋ฅผ ์ํด union ํ์ ์ด๋ผ๋ ๊ฒ์ด ์ฌ์ฉ๋ฉ๋๋ค.
union ์ ์ฌ๋ฌ ํ์ ์ค ํ๋๋ฅผ ๊ฐ์ง ์ ์๋ ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉ์ด ๋๋ค.
union์ < | > ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ์ ์ ๊ฒฐํฉํ์ฌ ํํํ ์๊ฐ ์๋ค.
union ์ฌ์ฉ ์ฌ๋ก
type StringOrNumber = string | number; // ์ํ๋ค๋ฉด | boolean ์ด๋ฐ์์ผ๋ก ํ์
์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
function processValue(value: StringOrNumber) {
if (typeof value === 'string') {
// value๋ ์ฌ๊ธฐ์ string ํ์
์ผ๋ก ๊ฐ์ฃผ
console.log('String value:', value);
} else if (typeof value === 'number') {
// value๋ ์ฌ๊ธฐ์ number ํ์
์ผ๋ก ๊ฐ์ฃผ
console.log('Number value:', value);
}
}
processValue('Hello');
processValue(42);
- TypeScript๋ฅผ ์ฐ๋ฉด์ ์ฌ๋ฌ ํ์ ์ ํ๋์ ๋ณ์๋ก ํด๊ฒฐํ๊ฒ ๋ค๋ ์๊ฐ์ ๊ฐ๊ธ์ ์ง์ํ๋ ๊ฒ์ด ์ข๋ค.
- ์ด๋ฐ ์ฌ์ํ ์ต๊ด๋ค์ด ์ฝ๋์ ์์ ์ฑ์ ๋์ด๊ณ ์ ์ง ๋ณด์์ฑ์ ๊ฐ์ ํ ์ ์๋ค๋ ์๊ฐ์ด ๋ ๋ค.
#ts #union #any #unknown #
'TS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TS] : utility type (0) | 2023.08.22 |
---|---|
[TS] : ์ ๊ทผ ์ ํ์ (0) | 2023.08.22 |
[TS] : tuple enum (0) | 2023.08.18 |
[TS] : .d.ts (0) | 2023.08.17 |
[TS] : tsconfig.json (0) | 2023.08.17 |