
π― TypeScriptμ κΈ°λ³Έ κ°λ μ μ 리ν©λλ€.
Microsoftμμ κ°λ°ν JavaScriptμ μμ μΈμ΄λ‘, μ μ νμ κΈ°λ₯κ³Ό κ°μ²΄μ§ν₯μ μμλ₯Ό κ°μΆκ³ μμ΅λλ€.

TypeScriptλ‘ μμ±λ μ½λλ μ§μ μ€νλ μ μμΌλ©°, λ¨Όμ JavaScriptλ‘ μ»΄νμΌλ ν λΈλΌμ°μ λ Node.js νκ²½μμ μ€νν μ μμ΅λλ€.
π€ μ νμ μ€ν¬λ¦½νΈκ° νμν κΉ?
JavaScriptλ νλ‘μ νΈ κ·λͺ¨κ° 컀μ§λ©΄μ κ° λ³μλ ν¨μκ° μ΄λ€ νμ μ κΈ°λνλμ§ κΈ°μ΅νκΈ° μ΄λ ΅μ§λ§ TypeScriptλ νμ μ μ§μ ν μ μκΈ° λλ¬Έμ μ μ§λ³΄μμ±μ΄ μ’μ΅λλ€.
JavaScriptλ λ°νμμμ νμ μ€λ₯λ₯Ό λ°κ²¬νμ§λ§, TypeScriptλ μ»΄νμΌ λ¨κ³μμ μ€λ₯λ₯Ό λ°κ²¬νκΈ° λλ¬Έμ νμ μ΄ μλͺ»λλ©΄ λ²κ·Έλ₯Ό 미리 λ°©μ§ν μ μμ΅λλ€.
TypeScriptλ₯Ό μ¬μ©νλ €λ©΄ λ¨Όμ Node.jsκ° μ€μΉλμ΄ μμ΄μΌ ν©λλ€.

TypeScriptλ₯Ό μ μμΌλ‘ μ€μΉν©λλ€.npm i -g typescript
tsconfig.json μ€μ νμΌμ μμ±ν©λλ€.tsc --init
TypeScript μ»΄νμΌ ν©λλ€.tsc νμΌλͺ
.ts
λ§€λ² μ»΄νμΌμ ν νμ μμ΄ μλ μ»΄νμΌ λλλ‘ --watch λͺ¨λλ₯Ό μ€μ ν΄μ€λλ€.
tsc -w νμΌλͺ
.ts
JavaScriptλ‘ λ³νλ νμΌμ Node.jsλ‘ μ€νν©λλ€.node νμΌλͺ
.js
TypeScriptλ λ°μ΄ν° νμ μ λͺ ννκ² μ μν μ μμ΅λλ€. λν, νμ μ λͺ μνμ§ μλλΌλ νμ μΆλ‘ κΈ°λ₯μ ν΅ν΄ μλμΌλ‘ νμ μ κ²°μ ν©λλ€.
number : μ«μλ₯Ό νννλ νμ
μ
λλ€. μ μμ μ€μλ₯Ό λͺ¨λ ν¬ν¨ν©λλ€. let age: number = 25;
π€ μ«μ 리ν°λ΄μ΄λ 무μμΌκΉ?
μ«μ κ°μ μ§μ νννμ¬ μ μνλ λ°©μμ λ§ν©λλ€.
let speed: 50 | 100 | 200; speed = 100; // μ ν¨ speed = 150; // μλ¬
β 리ν°λ΄(Literal)μ΄λ?
리ν°λ΄μ μ°λ¦¬κ° μ½λμμ μ§μ μ μ΄ λ£λ κ° κ·Έ μ체λ₯Ό λ§ν©λλ€.
μλ₯Ό λ€μ΄,const num = 3; const str = "hello";
string : λ¬Έμμ΄μ ννν©λλ€. μμλ°μ΄ν('), ν°λ°μ΄ν("), λλ λ°±ν±(`)μ μ¬μ©ν μ μμ΅λλ€. let name: string = "Alice";
π€ λ¬Έμμ΄ λ¦¬ν°λ΄μ΄λ 무μμΌκΉ?
λ¬Έμμ΄ κ°μ μ§μ νννμ¬ μ μνλ λ°©μμ λ§ν©λλ€.
let fruit: "apple"; fruit = "apple"; // μ ν¨ fruit = "banana"; // μλ¬
boolean : μ°Έ(true) λλ κ±°μ§(false)μ λνλ
λλ€. let isDarkModeEnabled: boolean = false;
π€ λΆλ¦¬μΈ 리ν°λ΄μ΄λ 무μμΌκΉ?
μ°Έκ³Ό κ±°μ§ κ°μ μ§μ νννμ¬ μ μνλ λ°©μμ λ§ν©λλ€.
let isTrue: true; isTrue = true; // μ ν¨ isTrue = false; // μλ¬
null : κ°μ΄ μμμ λͺ
μμ μΌλ‘ λνλ
λλ€. let selectedProduct: string | null = null;
π€
null리ν°λ΄μ΄λ 무μμΌκΉ?
nullκ°μ μ§μ νννμ¬ μ μνλ λ°©μμ λ§ν©λλ€.let currentUser: null; currentUser = null; // μ ν¨ currentUser = "guest"; // μλ¬
undefined : κ°μ΄ ν λΉλμ§ μμ μνλ₯Ό λνλ
λλ€. let userName: string | undefined;
console.log(userName); // undefined
π€
undefined리ν°λ΄μ΄λ 무μμΌκΉ?
undefinedκ°μ μ§μ νννμ¬ μ μνλ λ°©μμ λ§ν©λλ€.let status: undefined; status = undefined; // μ ν¨ status = "active"; // μλ¬
object : κ°μ²΄μ νμ
μ μ μν λ μ¬μ©ν©λλ€. κ°μ²΄λ ν΄λμ€λ ν¨μλ‘ μμ±ν μ μμ΅λλ€.// ν΄λμ€ μ¬μ© μμ
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
}
const student: object = new Person("Alice");
// ν¨μλ‘ κ°μ²΄ μμ±
function createAnimal(type: string, age: number) {
return { type, age };
}
const animal: object = createAnimal("Dog", 3);
π€ κ°μ²΄ 리ν°λ΄μ΄λ 무μμΌκΉ?
μ€κ΄νΈ
{}λ₯Ό μ¬μ©ν΄ μ§μ κ°μ²΄λ₯Ό μ μΈνκ³ κ°μ μ μνλ λ°©μμ λ§ν©λλ€. μ¦, κ°μ²΄λ₯Ό λ§λ€ λ ν΄λμ€λ₯Ό μ¬μ©νκ±°λ ν¨μλ‘ μμ±νμ§ μκ³ , νμν μμ±κ³Ό κ°μ μ§μ μ¨μ μ¦μμμ λ§λ κ°μ²΄μ λλ€.let person : { name: 'John', age: 30 }; person = { name: 'John', age: 30 }; // μ ν¨ person = { name: 'Alice', age: 25 }; // μλ¬
array : κ°μ νμ
μ μμλ₯Ό κ°μ§λ λ°°μ΄μ ννν λ μ¬μ©ν©λλ€.// κΈ°λ³Έ λ°°μ΄ μ μΈ
let numbers: number[] = [1, 2, 3];
let names: string[] = ["Alice", "Bob"];
// μ λμΈ νμ
λ°°μ΄
let mixedArray : (number | string)[] = [1, 'two', 3, 'four'];
// μ½κΈ° μ μ© λ°°μ΄ (ReadonlyArray<T>)
let readOnlyArray : ReadonlyArray<number> = [1, 2, 3];
π€ μ λμΈ νμ (Union Types)μ΄λ?
μ¬λ¬ νμ μ€ νλλ₯Ό κ°μ§ μ μλλ‘ νμ©νλ νμ μ λλ€.let value: string | number; value = "hello"; value = 42;
tuple : κ³ μ λ κΈΈμ΄μ κ°κ°μ μΈλ±μ€μ λ€λ₯Έ νμ
μ κ°μ§ μ μλ λ°°μ΄μ
λλ€. νμ
μ μμμ λ°°μ΄μ κΈΈμ΄κ° κ³ μ λ λ°°μ΄μ
λλ€.let person: [string, number] = ["Alice", 30];
any : λͺ¨λ νμ
μ νμ©ν©λλ€. κ°λ₯ν ν μ¬μ©μ μ§μν΄μΌ νλ©°, νμ
κ²μ¬μ μ΄μ μ μκ² λ©λλ€.let value: any = "λ¬Έμμ΄";
value = 10;
unknown : μΈλΆ λ°μ΄ν°μ κ°μ΄ νμ
μ μ μ μλ κ°μ μ²λ¦¬ν λ μ¬μ©λ©λλ€. anyλ³΄λ€ μμ νλ©°, νμ
νμΈ μμ΄ μ¬μ©νλ©΄ μ€λ₯κ° λ°μν©λλ€.let input: unknown = "Hello";
if (typeof input === "string") {
console.log(input.toUpperCase());
}
interface : κ°μ²΄μ μμ± κ΅¬μ‘°μ νμ
μ μ μνλ λ° μ¬μ©λ©λλ€. ν¨μ, ν΄λμ€, κ°μ²΄ λ± λ€μν κ³³μμ ꡬ쑰λ₯Ό λͺ
νν μ§μ ν μ μμ΄ μ½λμ κ°λ
μ±κ³Ό μ μ§λ³΄μμ±μ λμ¬μ€λλ€.interface Animal {
name: string;
age?: number; // μ νμ νλ‘νΌν°λ μμ±κ° λ€μ`?`λ₯Ό λΆμ¬ ννν΄μ€λλ€.
sound(): void;
}
class Dog implements Animal { // implementsλ 'ꡬννλ€'λ μλ―Έλ‘, Dog ν΄λμ€κ° Animal μΈν°νμ΄μ€μ ꡬ쑰λ₯Ό λ°λμ λ°λΌμΌ νλ€λ λ»μ
λλ€.
name: string;
age?: number;
constructor(name: string, age?: number) {
this.name = name;
if (age !== undefined) {
this.age = age;
}
}
sound() { // sound() λ©μλλ ννλ§ μ‘΄μ¬νλ―λ‘, μ€λ²λΌμ΄λ©(μ¬μ μ)λ₯Ό κΌ ν΄μ€μΌ ν©λλ€.
console.log("λ©λ©!");
}
}
const dog1 = new Dog("μ΄μ½", 3);
const dog2 = new Dog("λ°λμ΄");
dog1.sound(); // λ©λ©!
enum : μλ―Έ μλ μ΄λ¦μΌλ‘ μ ν΄μ§ κ°μ μ§ν©μ μ μνλλ° μ¬μ©λ©λλ€. μ«μ λλ λ¬Έμμ΄ κ°μ μ§μ μ μνκ³ κ΄λ¦¬ν μ μμΌλ©°, μ½λμ κ°λ
μ±, μμ μ±, μλμμ± νΈμμ±μ λμ¬μ€λλ€.// κΈ°λ³Έ `eunm`
enum Weekday {
Monday, // μ무 κ°λ μ§μ νμ§ μμΌλ©΄ 0λΆν° μμ°¨μ μΌλ‘ μ«μκ° ν λΉλ©λλ€.
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
}
let today: Weekday = Weekday.Tuesday;
console.log(today); // 1
// -----------------------------------------
// λ¬Έμμ΄ `enum`
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
let move: Direction = Direction.Left;
console.log(move); // LEFT
type : νμ
μ μ΄λ¦μ λΆμ¬ μ¬μ¬μ©ν μ μκ² ν΄μ€λλ€. λ€μν ννμ νμ
μ ννν μ μμΌλ©°, 볡μ‘ν νμ
μ κ°κ²°νκ² κ΄λ¦¬νκ³ κ°λ
μ±μ λμ¬μ€λλ€.type Status = "loading" | "success" | "error";
let current: Status = "success";
μμ±(νλ‘νΌν°)κ³Ό λμ(λ©μλ)μ μ μνκ³ , μ΄λ₯Ό λ°νμΌλ‘ new ν€μλλ₯Ό ν΅ν΄ μ€μ κ°μ²΄λ₯Ό λ§λ€ μ μμ΅λλ€.
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet(): void {
console.log(`μλ
νμΈμ, μ λ ${this.name}μ΄κ³ ${this.age}μ΄μ
λλ€.`);
}
}
const user = new Person("Alice", 30);
user.greet(); // μλ
νμΈμ, μ λ Aliceμ΄κ³ 30μ΄μ
λλ€.
getter / setterν΄λμ€ μμμ νλ‘νΌν°λ₯Ό μμ νκ² λ€λ£¨κΈ° μν λ°©λ²μΌλ‘ μ§μ μμ±μ μ κ·Όνλ λμ , κ°μ μ μΌλ‘ κ°μ μ½κ±°λ μμ ν μ μκ² ν©λλ€.
class User {
private _name: string;
constructor(name: string) {
this._name = name;
}
// getter
get name(): string {
return this._name;
}
// setter
set name(newName: string) {
if (newName.length < 2) {
throw new Error("μ΄λ¦μ μ΅μ 2μ μ΄μμ΄μ΄μΌ ν©λλ€.");
}
this._name = newName;
}
}
const user = new User("Alice");
console.log(user.name); // "Alice"
user.name = "Bob";
π€ μ
publicμ μ μ°κ³ μΌλΆλ¬ 볡μ‘νκ²private+get/setμ μΈκΉ?1οΈβ£ λ°μ΄ν°μ μ§μ μ κ·Όμ λ§κ³ μ μ΄ν μ μκΈ° λλ¬Έμ λλ€.
setμ λ£μλ 쑰건μΌλ‘ μ΄μν κ°μ λ£λ κ²μ λ°©μ§ν μ μμ΅λλ€.set empName(val: string) { if (val.length < 2) { throw new Error("μ΄λ¦μ λ κΈμ μ΄μμ΄μ΄μΌ ν©λλ€!"); } this._empName = val; }2οΈβ£ λ΄λΆ ꡬνμ λ°κΎΈκΈ° μ½κΈ° λλ¬Έμ λλ€.
_empNameλ§κ³ λ€λ₯Έ ννλ‘ λ°κΏ λ μ©μ΄ν©λλ€.get empName() { return this._empName.toUpperCase(); }
β¨ μμ±μμμ λ°λ‘ μ μΈνκ³ μ΄κΈ°ννλ λ°©λ²
beforeclass Employee { private _empName: string; private _age: number; private _empJob: string; constructor(empName: string, age: number, empJob: string) { this._empName = empName; this._age = age; this._empJob = empJob; } }
- λ§€κ°λ³μ μ΄λ¦κ³Ό νλ μ΄λ¦μ λ€λ₯΄κ² μ§μ ν μ μμ΄μ μ μ°ν©λλ€
- λ 볡μ‘ν λ‘μ§μ΄ μλ κ²½μ° (
this._age = validateAge(age)) μ 리ν©λλ€.
afterclass Employee { constructor( private _empName: string, private _age: number, private _empJob: string ) {} }
- λ°λ³΅μ΄ μμ΄μ κ°λ μ± μ’κ³ λΉ λ₯΄κ² μμ± κ°λ₯ν©λλ€.
λ°νμμμ λ μ νν νμ μ μΆλ‘ ν μ μκ² λμμ£Όλ κΈ°λ₯μ λλ€.
function printValue(value: string | number) {
if (typeof value === "string") {
console.log(value.toUpperCase()); // stringμΌλ‘ μ’νμ§
} else {
console.log(value.toFixed(2)); // numberλ‘ μ’νμ§
}
}
C κ³μ΄ μΈμ΄μμ κ²½ννλ interfaceλ enum κ°λ
λλΆμ, νμ
μ€ν¬λ¦½νΈ λ¬Έλ²μ΄ ν¨μ¬ λ μ΄λ ΅κ² λκ»΄μ‘λ€.
