[TypeScript] ํ์ ์คํฌ๋ฆฝํธ(TS) ๊ธฐ์ด
์๋ก ์ฎ๊ธด ํ์์ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ด๋ค. ์ ๊ทธ๋ ์ต๋๋ค. ๋ญ๋ ๋ฐฐ์๋๋ฉด ์ข์ผ๋๊น
โ ํ์ ์คํฌ๋ฆฝํธ(TypeScript)๋?
๋ง์ดํฌ๋ก์ํํธ์์ ๊ฐ๋ฐํ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํผ์ (superset) ์คํ์์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด. ์ฆ, ํ์ ์คํฌ๋ฆฝํธ ≥ ์๋ฐ์คํฌ๋ฆฝํธ
ํ์ ์คํฌ๋ฆฝํธ(์ดํ TS)๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํธ๋์ค ์ปดํ์ผ๋๋ค.
1. ์๋ฐ์คํฌ๋ฆฝํธ(์ดํ JS)๋ ๋งค์ฐ ๊ด๋ํ ์ธ์ด๋ค. ์ด์ ๋ฐ๋๋ก TS๋ ์ธ์ด์ ๋ฏธ๋ฆฌ ํ์ ์ ๋ถ์ฌํ์ฌ ์๊ฒฉํ๊ฒ ๋ณ์๋ฅผ ์ ํํ๋ ๊ฒ์ด๋ฏ๋ก ์ปดํ์ผ ์, ์๋ฌ๋ฅผ ์ก๊ธฐ์ ์ฉ์ดํ๋ค.
2. ๋ํ ์คํ ์๋ ์ ์ฅ์ ์ด ์๋ค. ๋ฐํ์ ์, ์๋ฌ๋ฅผ ์ฒดํฌํ๋ ๋์ ๊ทธ ์ ์ ์ฌ๋์ด ์ง์ ์ค๋ฅ๋ฅผ ์ฒดํฌํ๊ธฐ ๋๋ฌธ์ JS์ ๋นํด ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค.
3. ์์ ํ๋ฉฐ, ํ์ ์ ์ฉ์ดํ๋ค. ํ์ธ์ ์ฝ๋๋ฅผ ์ฝ์์ ๋์ ํ ๋์ ์ด๋ค ํ์ ์ธ์ง ์ ์ ์์ผ๋ฏ๋ก.
JS๋ ๋์ ์ธ์ด, ๋ฐํ์ ์ ์๋ฌ ๋ฐ์
TS๋ ์ ์ ์ธ์ด, ๋ฐํ์ ์ ์๋ฌ ๋ฐ์ (๋ ์์ ํจ)
ํฐ ํ๋ก์ ํธ์ผ์๋ก JS์ ์์ ๋๋ ๋ ์ด ๋๋ค๊ณ ํ๋ค.
* superset : A ≥ B ์ผ ๋, A๋ B์ ์ํผ์ ์ด๋ค.
Vue์์๋ TS ์ฌ์ฉ์ ์ํด .ts ํ์ฅ์๋ฅผ ์ฌ์ฉํ๋ค. (React๋ .tsx๋ผ๊ณ ํจ)
์ด .ts ํ์ฅ์๊ฐ .js๋ก ์ปดํ์ผ ๋๋ ๊ฒ
โ ํ์ ์คํฌ๋ฆฝํธ์ ํ์
1. Boolean
let isJoin: boolean;
let isJoin: boolean = true;
2. Number
let num: number;
let integer: number = 10;
let float: number = 3.14;
let nan: number = NaN;
3. String
let str: string;
let name: string = 'KIMEUNA'
let name: string = lastName + 'EUNA';
let name: string =`${lastName}EUNA`;
4. Array
let colors: String[] = ["Red", "Blue", "Yellow"];
let colors: Array[String] = ["Red", "Blue", "Yellow"];
let num: number[] = [1, 2, 3, 4, 5];
let num: Array<number> = [1, 2, 3, 4, 5];
์๋์ ๋์ค๋ ์ ๋์ธ ํ์ (๋ค์ค ํ์ )์ ์ด์ฉํ ์๋ ์๋ค.
let arr: (string | number)[] = ['red', 1, 'blue', 2];
let arr: Array<string | number> = ['red', 1, 'blue', 2];
๋ฐฐ์ด์ ํ์ ์ ๋ฏธ๋ฆฌ ์ ์ธ ํ ์ ์๋ ๊ฒฝ์ฐ์๋ any๋ฅผ ์ฌ์ฉํ๋ค.
let arr: any[] = [0, {}, [], "red", true];
์ธํฐํ์ด์ค์ ์ปค์คํ ํ์ ๋ ์ฌ์ฉํ ์ ์๋ค.
interface Userinfo {
name: string;
age: number;
isJoin: boolean;
}
let arr: Userinfo[] = [
{
name: "KIMEUNA",
age: 30,
isJoin: true,
},
{
name: "RYUHANMIN",
age: 32,
isJoin: true,
},
];
์ฝ๊ธฐ์ ์ฉ(!) ๋ฐฐ์ด๋ ์๋ค.
let colors: readonly String[] = ["Red", "Blue", "Yellow"];
let colors: ReadonlyArray[String] = ["Red", "Blue", "Yellow"];
5. Tuple
ํํ ํ์ ์ ๋ฐฐ์ด๊ณผ ์ ์ฌํ๋, ๊ณ ์ ๋ ํ์ ๋ฟ ์๋๋ผ ๊ณ ์ ๋ ๊ธธ์ด๋ ํํํ๋ค.
let tuple: [string, number]
tuple = ['KIMEUNA', 30];
tuple = [30, 'KIMEUNA'];
let userInfo: [number, string, boolean] = [30, 'kimeuna', true];
let userInfo: [number, string, boolean][];
let userInfo: Array<[number, string, boolean]>
usersA = [[30, 'kimeuna', true], [33, 'ryuhanmin', false]];
๊ฐ์ผ๋ก ๋์ฒด ๊ฐ๋ฅ
let userInfo: [1, string, true];
๊ณ ์ ๋ ๊ธธ์ด๋ผ๊ณ ๋ ํ๋, push / splice ํจ์๋ก ๊ฐ์ ๋ฃ๋ ํ์๋ ๊ฐ๋ฅํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ฝ๊ธฐ ์ ์ฉ๋ ์์ฑํ ์ ์๋ค.
let arr: readonly [string, number] = ['kimeuna', 30];
a[0] = 'ryuhanmin'; //Error
6. Enum
์ซ์ ํน์ ๋ฌธ์์ด ๊ฐ ์งํฉ์ ์ด๋ฆ์ ๋ถ์ฌํ ์ ์๋ค. ๊ฐ์ ์ข ๋ฅ๊ฐ ์ผ์ ๋ฒ์๋ก ์ง์ ๋์ด์๋ ๊ฒฝ์ฐ ์ฐ๊ธฐ ์ข๋ค(์์ผ ๋ฑ)
0๋ถํฐ ์์ํ๊ณ 1์ฉ ์ฆ๊ฐํ๋ค.
enum Week {
Sun,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat
}
console.log(Week.Mon);
console.log(Week.Tue);
์ค๊ฐ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ง์ ๋ ๊ฐ๋ฅํ๋ค.
enum Week {
Sun,
Mon=7,
Tue,
Wed,
Thu,
Fri,
Sat
}
console.log(Week.Mon); // 7
console.log(Week.Tue); // 8
์ญ๋ฐฉํฅ ๋งคํ์ ์ง์ํ๋ค.
console.log(Week['Mon']); // 1
console.log(Week[1]); // 'Mon'
7. any
๋ชจ๋ ํ์ ์ ์๋ฏธํ๋ค. ์ผ๋ฐ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์ธ๋ถ ์์์ ํ์ฉํ์ฌ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ, ํ์ ์ ๋จ์ธํ ์ ์์ผ๋ฏ๋ก ์ ์ฉํ๋ค.
let any: nay = 123;
any = {};
any = null;
any = 'kimeuna'
const arr: any[] = [30, 'kimeuna', true];
8. Unknown
any์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ ์๋ ํ์ ์ ์๋ฏธํ๋ค. unknow ํ์ ์ any๋ฅผ ์ ์ธํ ๋ชจ๋ ํ์ ์ ํ ๋นํ ์ ์๋ค.
let u: unknown = 19940207;
let ea1: number = u; //unknown์ any๋ฅผ ์ ์ธํ๊ณ , ๋ค๋ฅธ ํ์
์ ํ ๋น ๋ถ๊ฐ
let ea2: number = u as number; //ํ์
๋จ์ธ ํ์๋ ๊ฐ๋ฅ!
let ea3: any = u; // any์ unknown์ ์๋ก ํ ๋น ๊ฐ๋ฅ
9. Object
let obj: object = {};
let arr: object = [];
let fun: object = function () {};
let nullVal: object = null;
let date: object = new Date();
* ์ปดํ์ผ๋ฌ strict ์ต์
์ true๋ก ์ค์ ํ๋ฉด null ์ ๋์
์, Error ๋ฐ์!
์ด๋ฐ์์ผ๋ก ๊ฐ์ฒด์ ํ๋กํผํฐ ํ์ ์ ์ง์ ํด์ค ์ ์๋ค.
let userInfo: {name: string, age: number } = {
name: 'kimeuna',
age: false, // Error
email: 'nv@naver.com' // Error
}
๋ฐ๋ณต์ ์ธ ํ๋กํผํฐ ํ์ ์ง์ ์ ์ํ์ฌ์๋ ์ธํฐํ์ด์ค์ ํ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํธํ๋ค.
interface UserInfo {
name: string,
age: number
}
let userA: UserInfo = {
name: 'KIMEUNA',
age: 30
};
let userB: UserInfo = {
name: 'RYUHANMIN',
age: 33,
mail: true // Error
}
10. Null & Undefined
null๊ณผ undefined๋ ๋ชจ๋ ํ์ ์ ํ์ ํ์ ์ด๋ฏ๋ก, ๊ฐ ํ์ ์ ๋ชจ๋ ํ ๋น ๊ฐ๋ฅํ๋ค. ๋ฌผ๋ก ์๋ก์๊ฒ๋.
๋จ, stringNummCheck ์ต์ ์ true๋ก ์ฃผ๋ฉด ๋ ํ์ ์ ์๋ก ํ ๋น์ด ๋ถ๊ฐํ๋ค.
11. void
๊ฐ์ ๋ฐํํ์ง ์๋ ํจ์์์ ์ฌ์ฉ
const test(logs: string): void {
console.log('์ง์๊ฐ๊ณ ์ถ๋ค.');
}
12. Never
์ ๋ ๋ฐ์ํ์ง ์์ ๊ฐ์ ์๋ฏธํ๋ค. ์ด๋ ํ ํ์ ๋ ์ ์ฉ ๋ถ๊ฐํ๋ค.
const err(msg: string) never {
console.log('error');
}
์๋์ ๊ฐ์ด ๋น ๋ฐฐ์ด์ never ํ์ ์ผ๋ก ์ ์ธํ๊ณ , ๊ฐ์ pushํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
const never: [] = [];
never.push(27);
13. Union
๋ค์ค ํ์ ์ ํ์ฉํ๋ ๊ฒฝ์ฐ ์ ๋์ธ์ ์ฌ์ฉํ๋ค.
ํ์ ์ ๊ตฌ๋ถ ๊ฐ์ | ์ด๋ค. () ์ ์ ํ.
๊ผญ string, number ๋ ํ์ ์ ๊ฐ์ ๋ชจ๋ ๋ฃ์ง ์์๋ ๋๋ค. ๋ ์ค ํ๋์ ํ์ ๋ง ์กด์ฌํ๋ฉด ๋๋ค.
let union: (string | number);
union = 'KIMEUNA';
union = 30;
union = false; //Error
14. Intersection
์ธํฐ์น์ ์ & ์ ์ฌ์ฉํ์ฌ ๋ค์ค ํ์ ์ ์กฐํฉํ๋ค. ์์ฃผ ์ฌ์ฉ์ X
15. Function
ํจ์์๋ ํ์ดํ ํจ์๋ฅผ ์ด์ฉํ์ฌ ํ์ ์ง์ ์ด ๊ฐ๋ฅํ๋ค. ์ธ์์ ํ์ ๊ณผ ๋ฆฌํด ๊ฐ์ ํ์ ์ ์ ๋ ฅํ๋ค.
let func: (arg1: number, arg2: number) => number;
myFunc = function(x, y) {
return x + y;
}
myFunc(10, 100) // 110
let func2: () => void;
func2 = function () {
console.log('kimeuna');
};
ํ๋์ ๋ณด๋ ํ์ ์คํฌ๋ฆฝํธ(updated)
ํ์ ์คํฌ๋ฆฝํธ๋ Microsoft์์ ๊ฐ๋ฐํ๊ณ ์ ์ง/๊ด๋ฆฌํ๋ Apache ๋ผ์ด์ผ์ค๊ฐ ๋ถ์ฌ๋ ์คํ ์์ค๋ก, ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐํ ํ์ ์์คํ ์ ์ ์ฉํด ๋๋ถ๋ถ์ ์๋ฌ๋ฅผ ์ปดํ์ผ ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ ๋์
heropy.blog