본문 바로가기

javascript/typescript

(13)
[타입스크립트] 유틸리티 타입 part 1 이전에 언급했던 Partial 유틸리티 타입처럼, 타입스크립트 자체적으로 지원해주는 많은 유틸리티 타입이 존재한다. 이번에는 이렇게 프로그래머를 도와주는 유틸리티 타입에 대해 공부할 예정이다. Documentation - Utility Types Types which are globally included in TypeScript www.typescriptlang.org # Partial Type 집합의 프로퍼티를 선택적으로 설정한 타입을 생성한다. 유저가 계정을 생성하는 경우를 생각해보자. 우리는 계정을 생성할 때 ID, 비밀번호, 이름, 이메일 등의 정보를 필수적으로 수집한다. 이 정보들은 반드시 필요한 값들이므로, null 또는 undefined로 설정되어서는 안된다. 이 경우, 이러한 프로퍼티들을..
[타입스크립트] Partial 유틸리티 타입 예전에 nestjs 관련 강의를 듣다가 타입스크립트에 Partial 같은 유틸리티 타입이 존재한다는 사실을 알게 되었다. Partial 유틸리티 타입은 대상이 되는 집합의 모든 프로퍼티를 선택적으로 변환한다. 예를 들어 Partial 이라면, Human의 모든 프로퍼티는 선택적(?을 이용하여 표기하는 것)으로 바뀐다. 구체적인 예시를 들어보자. 특정 유저의 정보를 변환하는 update 메서드가 있다. 이 메서드는 UserEntity라는 유저의 프로퍼티를 정의한 클래스를 input으로 받아들이는데, 해당 유저의 다양한 프로퍼티 중 실제로 업데이트가 필요한 프로퍼티만을 객체를 통해 전달하도록 동작하게 만들고 싶다. UserEntity 및 update는 아래와 같다. 이때 몇가지 제한을 걸자. UserEnti..
[타입스크립트] Generics . 제네릭 C++, C#, Java 같은 언어들에서는 컴포넌트의 재사용성을 증진시키기 위해 template, 혹은 generic 문법을 지원한다. 타입스크립트에서도 이런 편리성을 위해 제네릭 문법을 지원한다. Documentation - Generics Types which take parameters www.typescriptlang.org 타입스크립트의 근원이 되는 자바스크립트는 기본적으로 동적 타입 기반의 언어이므로 제네릭 문법이 필요하지 않다. 우선 특정 변수나 객체의 타입을 명시하는 방법이 언어 측면에서 지원되지 않고, 특정 타입을 함수 등의 인수에 강제하지도 않기 때문이다. 단지 해당 인수의 기능을 외워 함수 안에서 구현하기만 하면 된다. function howAreYou(arg: string): str..
[타입스크립트] Narrowing 타입스크립트는 자바스크립트의 superset으로, 현재까지는 웹에서 타입스크립트 코드를 바로 사용하는 방법이 존재하지 않는다. ts-node도 컴파일을 거치지는 않더라도 자바스크립트 코드로 변환하여 node에게 전달하고 있다. 이때 타입스크립트의 토대가 되는 자바스크립트는 기본적으로 동적 타입을 채택하고 있으므로, 함수의 매개변수의 타입이 한정되지 않으며, 이로 인해 내부적으로 타입을 검사하는 코드가 존재하지 않는 경우 any로 취급된다. 이에 비해 타입스크립트는 정적 타입 시스템을 채택하고 있기 때문에, 함수의 매개변수를 명확히 한정할 수 있고, 함수 내부에서는 한정된 타입으로 동작하여, 자동완성 기능이 잘 작동하는 편이다. 이렇듯 타입스크립트는 자바스크립트와 채택하는 타입 시스템이 다르므로, if~e..
[타입스크립트] express 를 typescript와 사용하기 express는 자바스크립트와 사용해도 충분히 좋은 프레임워크이다. 하지만 특정 부분에서 자동완성이 작동하지 않기 시작하면서부터 나 자신에게 기억력 테스트를 요구하게 되며, 이로 인한 사기 저하를 뼈속 깊이 느끼게 된다. 특히 함수를 작성할 때 이런 감정을 느꼈는데. express에서 미들웨어를 분리하는 순간부터 req, res, next에 어떤 값이 들어있는지 빈약한 머리 수준으로는 알 방법이 없어 몇번씩 되돌아 보는 등, 삽질을 한 경험이 있다. 타입스크립트를 사용하면 위와 같은 눈물나는 상황은 나오지 않는다. 타입을 명시하여 자동완성이 잘 지원되기 때문이다. express에 이런 특징을 도입하여 좀더 편하게 사용해보자. @nodes/express 설치 npm init -y // 프로젝트를 defau..