Typescript 스터디
Typescript의 고급 타입, 제네릭, 데코레이터를 활용하는 방법을 자세히 알아봅니다.
고급 타입
Intersection
인터섹션 타입은 interface 간 상속 extends 와 같은 효과를 내게 된다.
type ElevatedEmployee = Admin & Employee;
Type Guard
특정 타입을 확정할 수 있게 만들어주는 역할을 한다.
function add(a: string | number, b: string| number) {
if(typeof a === "string" || typeof b === "string") {
return a.toString() + b.toString();
}
return a+b;
}
class Car() {}
class Truck () {
constructor(readonly loadCargo: boolean) {}
}
type Vehicle = Car | Truck;
function useVehicle(vehicle: Vehicle) {
if("loadCargo" in vehicle) {
}
if(vehicle instanceof Car) {
}
}
Discriminated Unions
interface Bird {
type: "bird",
flyingSpeed: number;
}
interface Horse {
type: "horse",
}
type Animal = Bird | Horse;
function moveAnimal(animal: Animal) {
switch(animal.type) {
case "bird":
console.log("bird");
console.log(bird.flyingSpeed);
case "horse":
console.log("h orse");
}
}
Index Type
key, value 가 string 인 객체 타입을 정의하고 싶을 때 다음과 같이 지정할 수 있다.
interface ErrorContainer {
[prop: string]: string
}
Overloading
function add(a: number, b: number): number
function add(a: string, b: string): string
function add(a: number, b: string): string
function add(a: string, b: number): string
function add(a: string | number, b: string | number): string | number {
return a + b;
}
Optional Chaining
const fetchedUserData = {
id: "u1",
name: "Heejae",
// job: {title: "CEO"}
}
console.log(fetchedUserData.job?.title);
Generics
Function Generics
function merge<T extends object, U extends object>(objA: T, objB: U): T & U {
return Object.assign(objA, objB);
}
const a = {
name: "a",
}
const b = {
description: "b",
}
const ab = merge(a, b);
function extractAndConvert<T extends object ,U extends keyof T>(obj: T, key: U) {
return `Value : ${obj[key]}`
}
Class Generics
Generics 를 이용해서 Class 도 만들어낼 수 있다.
class Storage<T> {
private data = T[];
addItem(item: T) {
this.data.push(item);
}
removeItem(item: T) {
this.data.splice(this.data.indexOf(item), 1);
}
}
Decorators
@ 는 타입스크립트에서 특별한 예약어이다. @ 뒤에는 항상 함수를 지목해야 한다. 실행하는 것이 아니고, 지목해야 한다. 선언부에서 Decorator 내부의 함수가 실행되는 순서는 Top-Down 이고, 실제로 함수가 실행되는 순서는 Bottom-Top 순서이다.
- Class Decorator 에서는 파라미터로 constructor 로 받을 수 있다.
- Property Decorator 에서는
목차
고급 타입 Type Guard Discriminated Unions Index Type Overloading Optional Chaining Generics Function Generics Class Generics Decorators
이것도 읽어보세요