개발자가 되고 싶은 개발자

시퀄라이즈의 타입스크립트 호환성 본문

Dev/JavaScript & TypeScript

시퀄라이즈의 타입스크립트 호환성

Fullth 2024. 7. 3. 00:43

(이 글은 작성중입니다.)

 

가벼움 등의 이점으로 노드를 이용하여 많은 기업들이 빠르게 서비스를 만들어 나갔지만 결국 동적언어의 한계로 타입스크립트가 등장했고, 이로 인해 더욱 더 노드가 트렌드가 되며 많은 인기를 끌었습니다.

 

기존 자바스크립트 라이브러리들도 오픈소스 개발자들로 인해 빠르게 타입지원을 이뤄나가 순식간에 TS를 도입하는 사례가 많았고 빠르게 국내 개발시장에 자리잡은 것 같습니다.

 

빠르게 나아지고 발전하고 있지만 항상 본인의 업무 환경이 최신 환경일 수는 없습니다.

 

어느 순간 현재 주어진 불편한 개발환경에 익숙해졌고, 어떤 환경에서도 방법은 존재하기 때문에 합리화했던 부분도 있었습니다.

 

더 합리적이고 좋은 방법이 있는데 여러 이유와 핑계들로 개선하려하지 않는 자세가 결국 공부의 필요성과 의욕도 저하시키는 것 같습니다.

 

생각하고 고민해보지 않고 템플릿처럼 복붙해서 사용해서 예전 면접 때 제대로 답변하지 못했던 질문을 정리해보고 향후 이어서 TypeORM 혹은 Prisma에 대해 비교해보겠습니다.

Q1.) Sequelize는 타입스크립트를 제대로 지원하지 않는다고 하는데 사용하시면서 어떠셨나요??
Q2.) TypeORM에 비해서 불편한 점은 없으셨나요??

 

 

TypeScript | Sequelize

We're working hard on making Sequelize a breeze to use in TypeScript.

sequelize.org

작성일 기준 stable 버전은 6.37.3 이고, 3개월 전에 배포되었습니다. 

최근까지 꾸준히 지원하는 것에 비해서는 INFO에서도 아직 타입스크립트를 완전하게 지원하는 것 같진 않은 듯한 설명입니다.

 

이어서 시퀄라이즈는 런타임 속성할당에 크게 의존하여, 즉시 사용할 수 없고 여러 수동 선언을 필요로한다고 나와있습니다. 

import { Model, Optional } from 'sequelize';

// We don't recommend doing this. Read on for the new way of declaring Model typings.

type UserAttributes = {
  id: number;
  name: string;
  // other attributes...
};

// we're telling the Model that 'id' is optional
// when creating an instance of the model (such as using Model.create()).
type UserCreationAttributes = Optional<UserAttributes, 'id'>;

class User extends Model<UserAttributes, UserCreationAttributes> {
  declare id: number;
  declare name: string;
  // other attributes...
}

TypeScript를 사용하기 위해서 공식문서에서 설명해주고 있는 사용법 예시 코드입니다.

어노테이션 기법없이 사용하려니, import를 제외하고도 많은 양의 코드가 필요합니다.

심지어 단 두 개의 프로퍼티임에도 벌써 중복도 존재하는 것을 보실 수 있습니다. 

 

(이 글은 작성중입니다.)