TypeScript는 정적 타입을 지원하여 코드의 안정성과 가독성을 높이는 데 도움을 줍니다.
타입 에너테이션(Type Annotation)은 변수, 매개변수, 반환값 등에 타입을 명시적으로 지정하는 방식입니다. TypeScript의 강력한 타입 시스템은 코드를 작성하는 동안 타입 오류를 사전에 방지합니다.
let age: number = 25; // 숫자 타입 지정
let name: string = 'John'; // 문자열 타입 지정
let isStudent: boolean = true; // 불리언 타입 지정
function greet(name: string): string {
return `Hello, ${name}!`;
}
let value = 10; // TypeScript가 자동으로 number 타입으로 추론
함수에 입력(매개변수)과 출력(반환값)의 타입을 명시적으로 지정하여 예상치 못한 동작을 방지할 수 있습니다.
function add(a: number, b: number): number {
return a + b;
}
const subtract = (a: number, b: number): number => a - b;
function logMessage(message: string, userId?: number): void {
console.log(`${message} - User: ${userId || 'Guest'}`);
}
객체의 구조를 정의하거나 타입 별칭(Type Alias)을 사용하여 가독성을 높이고 재사용성을 개선할 수 있습니다.
let user: { name: string; age: number } = { name: 'Alice', age: 30 };
type User = {
name: string;
age: number;
job?: string; // 선택적 프로퍼티
};
let admin: User = { name: 'Admin', age: 40 };
type Product = {
readonly id: string;
name: string;
};
const item: Product = { id: 'p-101', name: 'Laptop' };
// item.id = 'p-102'; // 오류 발생: 읽기 전용
배열 요소의 타입을 지정하여 일관성을 유지합니다.
let numbers: number[] = [1, 2, 3];
let strings: string[] = ['a', 'b', 'c'];
let booleans: Array<boolean> = [true, false, true];
let matrix: number[][] = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
유니언 타입(Union Type)을 사용하여 여러 타입 중 하나를 허용합니다.
let value: string | number;
value = 'hello';
value = 42;
let mixedArray: (string | number)[] = [1, 'two', 3];
let nullableValue: string | null = null;
튜플(Tuple)과 열거형(Enum)은 고정된 구조와 명명된 상수 집합을 정의하는 데 유용합니다.
type HTTP_Response = [number, string];
let success: HTTP_Response = [200, 'OK'];
let error: HTTP_Response = [404, 'Not Found'];
enum Role {
ADMIN,
USER,
GUEST,
}
let userRole: Role = Role.USER;
enum Status {
SUCCESS = 'SUCCESS',
FAILURE = 'FAILURE',
}
let currentStatus: Status = Status.SUCCESS;
인터페이스(Interface)는 객체의 구조를 정의하거나 클래스와 협력하는 데 사용됩니다.
객체 타입 정의
interface User {
name: string;
age: number;
job?: string; // 선택적 프로퍼티
}
let user: User = { name: 'John', age: 25 };
함수 타입 정의
interface Greeter {
(name: string): string;
}
const greeter: Greeter = (name) => `Hello, ${name}!`;
클래스와 인터페이스
interface Shape {
area(): number;
}
class Circle implements Shape {
constructor(public radius: number) {}
area(): number {
return Math.PI * this.radius ** 2;
}
}