개인 프로젝트에 swc와 typia typescript-json를 사용한적이 있었는데
swc의 빠른 컴파일 속도와 typia의 간편한 런타임 validation에 놀랐었다.
하지만 아쉽게도 같이 사용하지는 못했다.
typia는
ttsc
를 사용한 JS로 컴파일 되기 때문에 같이 사용 될 수 없었다.
최근 typia 이슈 구경 중 typia generate를 통해 ts -> es6 ts
컴파일이 되는 것을 알게되어
둘을 한번 같이 사용해보려 한다.
typia
는 class-validator, typebox, ajv, zod와 같은 validation을 지원하는 라이브러리이다.
이 라이브러리들과는 다르게 class 또는 DTO를 사용하지 않고 타입스크립트type
또는interface
를 사용하여
type safe한 validation이 가능하다는게 특징이다.
또한 AOT를 사용하기 때문에 다른 라이브러리들에 비해 월등한 속도를 자랑한다고 한다. 공식문서
최근 comment tags도 추가되었고
3.7 버전에는 custom tags도 추가된다고 한다.
JS로 컴파일 전 es6로 먼저 컴파일
npx typia generate --input src/templates --output src/functional
전체적인 사용법은 setup 을 참고하길 바랍니다.
Error: Debug Failure. Unexpected moduleResolution: Node
위 generate 명령어 사용하면 에러 발생.
도입된지 얼마 안된 기능이라 아직 완전하지 않은듯 하다.
약간 꼼수같은 방법이지만
tsconfig.json을 상속받는 typia.tsconfig.json
파일을 만들어 --project
플래그를 사용해 주입해주면 된다.
{
"extends": "./tsconfig.json",
"compilerOptions": { "moduleResolution": 2 }
}
npx typia generate --input ./src/typia --output ./src/dist --project typia.tsconfig.json
npm i -D @swc/cli @swc/core
npx swc .\src\dist\validate.ts -d .\src\
ttsc는 target 옵션에 따라 swc 설정을 바꾸어 줘야합니다.
.swcrc
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": true,
"decorators": false
},
"target": "es5"
},
"module": {
"type": "commonjs"
}
}
최근 회사 플젝 validation 라이브러리를 json-schema
-> typia
마이크레이션을 진행하였는데
swc
도 적용해서 조금 더 편한 개발 환경을 구성할 수 있게 되었다.
도중에 발견한 typia 오류도 제보했다.
TS로 컴파일하고 다시 JS로 컴파일 하는 방식이기 때문에
아직 번거로운 설정을 거쳐야 하고 수정되어야 할 버그들이 있어 아쉽지만
강력한 validation과 빠른 컴파일을 경험 해본다면
다시 돌아가기 힘들지 않을까 생각한다.
https://github.com/samchon/typia/issues/146
https://github.com/samchon/typia/issues/509