๐TypeScript ๊ฐ์ ๋ฐ ๊ธฐ์ด
โจTypeScript ๊ฐ์
TypeScript๋ ์ด๋ค ์ธ์ด์ธ๊ฐ?
TypeScript๋ JavaScript๋ฅผ ๋ ์์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก Type์ด๋ผ๋ ์์ ์ฅ์น๋ฅผ ์ถ๊ฐํ ํ์ฅํ JavaScript๋ผ๊ณ ํ ์ ์๋ค.โป์ฐธ๊ณ : tsconfig.js → TypeScript์ ์ปดํ์ผ๋ฌ ์ต์ ํ์ผ์ด๋ค.
โป์ฐธ๊ณ : tsconfig.js → TypeScript์ ์ปดํ์ผ๋ฌ ์ต์ ํ์ผ์ด๋ค.
โจTypeScript์ ์์ํ์ : number, string, boolean, null, undefined
TypeScript์ ์์ํ์ ์ธ Type number, string, boolean, null, undefined์ ๋ํด TypeScript๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
// type ์ฃผ์ ๋๋ type annotation
// ๊ธฐ๋ณธ์ ์ธ 5๊ฐ์ ์์ type: number, string, boolean, null, undefined
// number
let num1: number = 123;
let num2: number = -123;
let num3: number = 0.123;
let num4: number = -0.123;
let num5: number = Infinity;
let num6: number = -Infinity;
let numb7: number = NaN;
// num1.toUpperCase(); error
num1.toFixed();
// string
let str1: string = "hello";
let str2: string = 'hello';
let str3: string = `hello`;
let str4: string = `hello ${num1}`;
str1.toUpperCase();
// boolean
let bool1: boolean = true;
let bool2: boolean = false;
// null
let null1: null = null;
// undefined
let unde1: undefined = undefined;
// ๋ฆฌํฐ๋ด ํ์
// ๋ฆฌํฐ๋ด -> ๊ฐ์ด๋ผ๋ ๋ป
let numA: 10 = 10; // ํ์
์ผ๋ก ์ง์ ํ ๊ฐ ์ธ์๋ ๋ค๋ฅธ ๊ฐ์ ์ง์ ํ ์ ์๋ค.
let strA: "hello" = "hello";
// let boolA: true = false; error
โจTypeScript์ ๋ฐฐ์ด, ํํ
๋ฐฐ์ด๊ณผ ํํ์ ๋ํด์ TypeScript๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. ์ด๋, ํํ์ JavaScript์์๋ ์ง์ํ์ง ์๊ณ , TypeScript์์๋ง ์ง์ํ๋ type์ผ๋ก ๊ธธ์ด์ ํ์ ์ด ๊ณ ์ ๋ ๋ฐฐ์ด์ ์๋ฏธํ๋ค.
// ๋ฐฐ์ด
let numArr:number[] = [1,2,3];
let strArr:string[] = ["hello", "ts", "winterlood"];
let boolArr:boolean[] = [true,false,true];
let boolArr2: Array<boolean> = [true, false, true];
// ๋ฐฐ์ด์ ๋ค์ด๊ฐ๋ ๊ฐ์ด ๋ค์ํ ๊ฒฝ์ฐ
let multiArr: (number | string)[] = [1, "hello"];
// ๋ค์ฐจ์ ๋ฐฐ์ด์ ํ์
์ ์ ์ํ๋ ๋ฐฉ๋ฒ
let doubleArr: number[][] = [
[1,2,3],
[4,5]
];
// ํํ -> JavaScript์๋ ์๊ณ TypeScript์์๋ง ํน๋ณํ ์ ๊ณต๋๋ ํ์
// ํํ : ๊ธธ์ด์ ํ์
์ด ๊ณ ์ ๋ ๋ฐฐ์ด
let tup1:[number, number] = [1,2];
// tup1 = [1,2,3]; ๊ธธ์ด๋ฅผ ๋์ด์๋ ๋ฐฐ์ด์ ์ ์ฅํ ์ ์๋ค.
// tup1 = ["1","2","3"]; Type์ด ๋ค๋ฅธ ๋ฐฐ์ด์ ์ ์ฅํ ์ ์๋ค.
let tup2: [number, string, boolean] = [1,"2",true];
const users: [string, number][] = [
["์ด์ ํ",1],
["์ด์๋ฌด๊ฐ",2],
["๊น์๋ฌด๊ฐ",3],
["์ด์ ํ",4],
["์ด์ ํ",5],
]
โจTypeScript ๊ฐ์ฒด
๊ตฌ์กฐ์ ํ์ ์์คํ = Property ๊ธฐ๋ฐ ํ์ ์์คํ (Property-based type system) ↔ C์ธ์ด, Java๋ ๋ช ๋ชฉ์ ํ์ ์์คํ ์ด๋ค.
์ฆ, TypeScript๋ ๋๋ถ๋ถ์ ์ธ์ด๊ฐ ์ฌ์ฉํ๋ ๋ช ๋ชฉ์ ํ์ ์์คํ ์ด ์๋ ๊ตฌ์กฐ์ ํ์ ์์คํ ์ ์ฌ์ฉํ๋ค.
// object
// ๊ฒฐ๋ก ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๊ฐ์ฒด ๋ฆฌํฐ๋ด ํ์
์ ์ฌ์ฉํด์ผ ํ๋ค.
let user: {
id?: number, // ์์ด๋ ๋๊ณ , ์์ด๋ ๋๋๋ฐ ์๋ค๋ฉด type์ด number์ฌ์ผ ํ๋ค.
name: string
} = {
id:1,
name: "์ด์ ํ",
};
// ๊ฐ์ฒด์ type์ object๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ํ๊ธฐ๋ฒ์ผ๋ก ์ ๊ทผํ๋ ค๊ณ ํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
// console.log(user.name); error
// let dog:{
// name: string,
// color: string,
// } = {
// name: "๋๋์ด",
// color: "brown"
// }
user = {
name: "ํ๊ธธ๋",
};
*Optional Property
?๋ฅผ ๋ถ์์ผ๋ก์จ ์ ํ์ Property๋ก ์ง์ ํ ์ ์๋ค.
// object
// ๊ฒฐ๋ก ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๊ฐ์ฒด ๋ฆฌํฐ๋ด ํ์
์ ์ฌ์ฉํด์ผ ํ๋ค.
let user: {
id?: number, // ์์ด๋ ๋๊ณ , ์์ด๋ ๋๋๋ฐ ์๋ค๋ฉด type์ด number์ฌ์ผ ํ๋ค.
name: string
} = {
id:1,
name: "์ด์ ํ",
};
// ๊ฐ์ฒด์ type์ object๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ํ๊ธฐ๋ฒ์ผ๋ก ์ ๊ทผํ๋ ค๊ณ ํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
// console.log(user.name); error
// let dog:{
// name: string,
// color: string,
// } = {
// name: "๋๋์ด",
// color: "brown"
// }
user = {
name: "ํ๊ธธ๋",
};
โจํ์ ๋ณ์นญ๊ณผ ์ธ๋ฑ์ค ์๊ทธ๋์ฒ
โํ์ ๋ณ์นญ์ด๋?(Type Alias)
- ๋ณ์๋ฅผ ์ ์ธํ๋ฏ ํ์ ์ ๋ณ๋๋ก ์ ์ํ๋ ๊ฒ
- ๋์ผํ ์ค์ฝํ์ ๋์ผํ ์ด๋ฆ์ ํ์ ๋ณ์นญ ์ ์ธ ๋ถ๊ฐ
*๊ธฐ๋ณธ ํ์ ๋ณ์นญ
ํ์ ๋ณ์นญ์ ํตํด ๊ฐ๋จํ ๊ธฐ๋ณธ ํ์ ์ ์๋ก์ด ์ด๋ฆ์ผ๋ก ์ ์ํ ์ ์๋ค.
type UserId = string;
type Age = number;
let userId: UserId = "user123";
let userAge: Age = 25;
*๋ณต์กํ ํ์ ๋ณ์นญ
๊ฐ์ฒด์ ๊ฐ์ ๋ณต์กํ ๊ตฌ์กฐ์ ํ์ ๋ ๋ณ์นญ์ผ๋ก ์ง์ ํ ์ ์๋ค. User๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด ํ์ ์ ์ ์ํ์ฌ, ๋์ผํ ๊ตฌ์กฐ์ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
type User = {
id: UserId;
name: string;
age: Age;
email: string;
};
let newUser: User = {
id: "user123",
name: "John Doe",
age: 30,
email: "[johndoe@example.com](<mailto:johndoe@example.com>)"
};
โ์ธ๋ฑ์ค ์๊ทธ๋์ฒ
ํ๋กํผํฐ์ ์๊ฐ ๋ง์ ๋ ๋ชจ๋ ํ๋กํผํฐ์ ๋ํด type์ ์ง์ ํ๊ธฐ ๋ถํธํ๋ค.
type CountryCodes = {
[key: string]: string // key๊ฐ string ํ์
์ด๊ณ value๊ฐ string ํ์
์ธ ๋ชจ๋ ํ๋กํผํฐ๋ฅผ ํฌํจํ๋ค.
};
let countryCodes: CountryCodes = {
Korea: "ko",
UnitedState: "us",
UnitedKingdom: "uk",
// (... ์ฝ 100๊ฐ์ ๊ตญ๊ฐ)
Brazil : 'bz'
};
type CountryNumberCodes = {
[key: string]: number; // ๊ตญ๊ฐ ์ฝ๋๋ฅผ ์ซ์๋ก ๋ณด๊ดํ๋ ๊ฐ์ฒด๊ฐ ํ๋ ๋ ํ์ํ ๋
Korea: number; // ๋ฐ๋์ ํฌํจํด์ผ ํ๋ ํ๋กํผํฐ๊ฐ ์๋ค๋ฉด ๋ฐ๋ก ์ ์ ๊ฐ๋ฅ
Italy: string; // ์ค๋ฅ! ํ์ง๋ง ์ถ๊ฐ์ ์ธ ํ๋กํผํฐ๋ฅผ ์ ์ํ ๋๋ ์ธ๋ฑ์ค ์๊ทธ๋์ณ์ value ํ์
๊ณผ ์ง์ ์ถ๊ฐํ ํ๋กํผํฐ์ value ํ์
์ด ํธํ๋๊ฑฐ๋ ์ผ์นํด์ผ ํ๋ค.
};
โจEnum ํ์
Enum์ ์ปดํ์ผ ๊ฒฐ๊ณผ ๊ฐ์ฒด๊ฐ ๋๋ค.
// enum ํ์
// ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋ค์ ๊ฐ๊ฐ ์ด๋ฆ์ ๋ถ์ฌํด ์ด๊ฑฐํด๋๊ณ ์ฌ์ฉํ๋ ํ์
// ์ซ์ํ ์ด๊ฑฐ
enum Role {
ADMIN = 0,
USER = 1,
GUEST = 2,
}
const user1 = {
name: "์ด์ ํ",
role: Role.ADMIN, // ๊ด๋ฆฌ์
}
const user2 = {
name: "ํ๊ธธ๋",
role: Role.USER, // ํ์
}
const user3 = {
name: "์๋ฌด๊ฐ",
role: Role.GUEST, // ๊ฒ์คํธ
}
// enum์ ์ง์ ํ ๋นํ์ง ์์ผ๋ฉด 0๋ถํฐ 1์ฉ ๋์ด๋๋ ๊ฐ์ผ๋ก ์๋ ํ ๋น๋๋ค.
enum Role2 {
ADMIN, // 0 ํ ๋น(์๋)
USER, // 1 ํ ๋น(์๋)
GUEST, // 2 ํ ๋น(์๋)
}
// ๋ฌธ์ํ ์ด๊ฑฐ
enum Language {
korean = "ko",
english = "en",
}
const user11 = {
name: "์ด์ ํ",
role: Role.ADMIN, // 0
language: Language.korean,// "ko"
};
โจAny์ Unkown ํ์
โAny
Any๋ TypeScript๋ฅผ ์ ๋ช ๋ฌด์คํ๊ฒ ๋ง๋ค๊ณ ์ํํ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์ด ์ต๋ํ ์ฌ์ฉ์ ์ง์ํด์ผ ํ๋ค.
- ํ์ ๊ฒ์ฌ๋ฅผ ๋ฐ์ง ์๋(ํ์ ๊ณ์ธต๋๋ฅผ ๋ฐ๋ฅด์ง ์๋) ์นํธํค ํ์
- ์๋ฌด ํ์ ์ ๊ฐ์ ๋ด๊ฑฐ๋, ์๋ฌด ํ์ ์ ๋ฉ์๋๋ ๋ง์๋๋ก ํธ์ถ ๊ฐ๋ฅ
- any ํ์ ์ ๊ฐ์ ์ด๋ค ํ์ ์ผ๋ก ์ ์๋ ๋ณ์๋ ๋ฌธ์ ์์ด ๋ค ํ ๋น ๊ฐ๋ฅ
โUnknown
- ์ด๋ค ํ์ ์ ๊ฐ์ด๋ ๋ค ์ ์ฅํ ์ ์๋ค.
- ํ์ง๋ง unknown ํ์ ์ ๊ฐ์ ์ด๋ค ํ์ ์ ๋ณ์์๋ ์ ์ฅํ ์ ์๋ค.
- ๋ํ unknown ํ์ ์ ๊ฐ์ ์ด๋ค ์ฐ์ฐ์๋ ์ฐธ์ฌํ ์ ์๊ณ , ์ด๋ค ๋ฉ์๋๋ ์ฌ์ฉํ ์ ์๋ค.
- unknown ํ์ ์ ๊ฐ์ ์ฐ์ฐ์ ์ฐธ์ฌํ๊ฒ ํ๊ณ ์ถ๋ค๋ฉด ํ์ ์ขํ๊ธฐ๋ฅผ ํด์ผ ํ๋ค.
if (typeof unknownVar === "number") {
// ์ด ์กฐ๊ฑด์ด ์ฐธ์ด๋๋ค๋ฉด unknownVar๋ number ํ์
์ผ๋ก ๋ณผ ์ ์์
unknownVar * 2;
}
โจVoid์ Never ํ์
โVoid
- ์๋ฌด๋ฐ ๊ฐ๋ ์์์ ์๋ฏธํ๋ ํ์
- ๋ณดํต ์๋ฌด๋ฐ ๊ฐ๋ ๋ฐํํ์ง ์๋ ํจ์์ ๋ฐํ๊ฐ ํ์ ์ ์ ์ํ ๋ ์ฌ์ฉ
function logMessage(message: string): void {
console.log(message);
}
logMessage("This is a log message."); // ์ฝ์์ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ง๋ง ์๋ฌด ๊ฐ๋ ๋ฐํํ์ง ์
โNever
- ๋ถ๊ฐ๋ฅ์ ์๋ฏธํ๋ ํ์
- ๋ณดํต ํจ์๊ฐ ์ด๋ ํ ๊ฐ๋ ๋ฐํํ ์ ์๋ ์ํฉ์ผ ๋ ํจ์์ ๋ฐํ๊ฐ ํ์ ์ ์ ์ํ ๋ ์ฌ์ฉํ๋ค.
- ex) ๋ฌดํ ๋ฃจํ, ์๋์ ์ผ๋ก ์๋ฌ๋ฅผ throwํ๋ ํจ์
- never ํ์ ์ ๋ณ์์๋ any๋ฅผ ํฌํจํด ์ด๋ํ ํ์ ์ ๊ฐ๋ ํ ๋นํ ์ ์๋ค.
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {
// ๋ฌดํ ๋ฃจํ: ํจ์๋ ์ ๋ ์ข
๋ฃ๋์ง ์์ผ๋ฉฐ, ๊ฐ์ ๋ฐํํ์ง ์์
}
}
throwError("This is an error!"); // ํจ์๋ ์๋ฌ๋ฅผ ๋์ง๊ณ ์ข
๋ฃ๋์ง ์์
infiniteLoop(); // ๋ฌดํ ๋ฃจํ์ ๋น ์ ธ ์ข
๋ฃ๋์ง ์์
drizzle96 (์ฐ์ฐ(Ian)์ ๊ฐ๋ฐ ๋ธ๋ก๊ทธ) / ์์ฑ๊ธ - velog
'๐ป์น(Web) > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น๋ ๋๊ตฌ ๋น๊ต: Webpack๊ณผ Vite์ ์ฐจ์ด / ์ปดํ์ผ๊ณผ ๋น๋ (0) | 2024.11.10 |
---|---|
[TypeScript]TypeScript ์ดํดํ๊ธฐ(1) - ํ์ ์งํฉ / ์ถ๋ก / ๋จ์ธ (0) | 2024.09.04 |
ํ๋ก ํธ์๋ ์ฝ๋ฉ์ปจ๋ฒค์ (0) | 2024.07.13 |
[React]Custom Hook (0) | 2024.06.28 |
[React]Vite, Redux (0) | 2024.06.27 |