제네릭이란? 타입스크립트에서 제네릭이란 타입을 선언 당시 바로 정해주는 게 아니라 타입 변수라는 것을 둬서 매개변수의 타입이 타입 변수의 타입에 들어가는 일반적인 타입 추론 방식을 의미한다. 이를 통해 함수, 클래스, 인터페이스 등을 작성할 때 다양한 타입에 유연하게 대응할 수 있고, 코드의 재사용성도 높일 수 있다. function func(value: T): T { return value; } func(123); // T는 number 타입 func('abc'); // T는 string 타입 함수 이름 옆에 라고 되어 있는 게 바로 타입 변수이다. 타입 변수란 말 그대로 타입을 저장할 수 있는 변수이다. 이제 함수를 호출할 때 들어오는 매개변수의 타입에 따라서 T에 들어오는 타입이 유동적으로 변하게 ..
자바스크립트에서의 클래스 const studentA = { name: 'Shawn', age: 30, grade: 'A+' }; const studentB = { name: 'Lee', age: 25, grade: 'B' }; ... 객체의 형태가 모두 같고, 값만 다른 객체를 여러 개 찍어내야 한다면 위 코드처럼 일일이 객체를 하나하나 생성하는 것은 어쩌면 매우 비효율적인 방법일 수 있다. 이렇게 같은 형식의 객체들을 찍어내기 위해서는 모양틀이 필요한데, 그 역할을 해주는 게 바로 클래스이다. class Student { // 필드 name; age; grade; // 생성자 construct(name, age, grade) { this.name = name; this.age = age; this.gr..
인터페이스(interface)란? interface Person { name: string; age: number; } interface란 상호 간에 정의된 규칙이라는 뜻으로 타입스크립트에서는 객체의 타입을 지정할 때 많이 사용한다. 기존에 배운 type 선언처럼 interface를 선언할 때도 같은 방식으로 선언해준다. 일반적으로 interface는 객체의 타입을 정할 때 사용되며, 확장 기능이나 선업 병합과 같은 기능들로 인해서 객체를 정의할 때 interface 선언을 사용하는 것이 보편적이다. 또한, 선언을 할 때 '='를 사용하지 않고 바로 중괄호를 열어서 사용한다는 점도 type과의 차이점이라고 할 수 있다. 사용 방법 interface Person { name: string; age?: nu..
함수 타입 정의 방법 타입스크립트는 일반적인 변수에서뿐만 아니라 함수에도 타입을 정해줘야 한다. 일단 생각해 보자. 함수에 타입을 줄만한 값이 뭐가 있을까? 바로 매개변수와 리턴값이다. 함수에서는 매개변수와 리턴값에 각각 타입을 부여해 줄 수 있으며, 기본 타입과 똑같이 다른 함수 타입과 호환되기도 한다. 일반적인 방법 function func(a: number, b: number): number { return a + b; } // 결과값에는 타입을 따로 적지 않아도 자동으로 리턴값의 타입을 추론해준다. function func(a: number, b: number) { return a + b; } // 화살표 함수도 똑같다. const add = (a: number, b: number) => a + ..
타입 선언과 타입 단언 변수에 타입을 부여하는 방식에는 가장 일반적인 방법인 타입 선언이 있다. 또한 오늘 설명할 타입 단언이라는 것도 있다. 내용을 미리 스포(?)하자면, 타입스크립트 책에서도 웬만하면 타입 선언으로 타입을 부여하고 타입 단언은 특별한 상황이 아니면 사용하지 말라고 되어있다. 타입 단언은 어떻게 쓰는 것이고 무슨 허점이 있길래 되도록이면 사용을 하지 말라고 하는지 한번 살펴보자. 타입 단언으로 타입 부여하기 type Person = { name: string; color: string; } // 오류 뜨는 경우 let user: Person = {}; // 지금 말고 추후에 추가하고 싶은데.. name과 color가 없다고 오류가 뜨네? // 정상 작동하는 경우 let user: Per..