모든 소스 코드는 오픈소스로, 아래 레포들에 공개되어있습니다. https://github.com/rich-automation/lotto-module https://github.com/rich-automation/lotto-action > >자동화 설정은 다음의 글을 참고해주세요. lotto-action 설정 가이드 작년부터 하려던 사이드 프로젝트를 밍기적 거리다 드디어 올해 4월에 시작했다. 로또를 자동으로 구매하는 프로젝트, 프로젝트를 위해서 rich-automation 이라는 조직을 생성했
JavaScript(이하 JS) 생태계는 빠르게 발전하고 있고, 그에 따라서 익혀야 할 지식들과 스펙들은 점점 더 늘어나고 있습니다. JS를 사용한다면 필수로 익혀야하는 Package Manager 인 NPM(그리고 패키지)를 둘러싼 지식들에 대해서 글로 적어보려 합니다. >Module: module resolution (bundler, package.json), module system (esm/cjs) Versioning: tilde, caret, semver Package manager: yarn, pnpm, npm, corepack Dependency management: node_modules, hoisting, symlink, pnp Depedencies: dependencies, devDependencies, peerDependencies Module resolution (module resolve) 일반적으로 JS
try/catch 혹은 .catch() 로 핸들링 하지 않은 프로미스 요청에서 에러가 발생하는 경우, Unhandled promise rejection 워닝이나 미처 놓치게 되는 오류가 있을수도 있다. 만약 SDK를 사용하고 있고, 로거가 켜져있다면 특히나 더 거슬리는 요인이 되기도 한다. 특정 unhandled 에러만 걸러내거나 로그를 찾아서 봐야하는 경우, 아래와 같은 방식으로 override 가 가능하다.
공변성 > A 가 B 의 서브 그룹일때 > T 도 T 의 서브 그룹이다. > 받은 값들을 사용하지 않는 경우, 구분할 필요가 없는 케이스. 반공변성 > A 가 B 의 서브 그룹일때 > T 가 T 가 슈퍼 그룹이다. > 받은 값들을 사용해야 하는 경우, 구분할 필요가 있는 케이스. 이변성 > 공변성+반공변성, 서브그룹/슈퍼그룹 둘 다 OK 이변성에 대한 예시는 좀 극단적인 것 같긴하다. 문제가 있다면 댓글 부탁드립니다. ref. https://seob.dev/posts/공변성이란-무엇인가
Axios 에는 interceptors 라는 기능이 있다. 이를 통해서 request / response 에 선행,후행 처리를 커스텀하게 할 수 있다. 그취만.. 타입 스크립트에서는 interceptor 를 통해서 한번 포맷팅을 변경했지만 client.get 의 타입은 그대로 response.data 형태로 남아있는걸 겪을 수 있다. https://github.com/axios/axios/issues/1510 이슈를 통해서 활발한 논의가 진행됐었고 https://github.com/axios/axios/pull/1605 를 통해서 커스텀한 타입을 추가할 수 있게 수정되었다. (뒤쪽 제네릭의 기본값을 AxiosResponse 로 감싼 형태로 처리하고, 해당 제네릭을 return 값으로 처리했다.) 흠.. 계속해서 사용하기에 적합한 방식은 아닌 것 같다는 생각이 들었다. typescript 는 타입선언을 여러가지 방법으로 지원하는데 이 중
Problem Union 타입을 분리하여 함수에서 사용할 경우, 파라메터 추론이 정상적으로 동작하지 않는다. Solution 1 이럴때는 그냥 분리하지말고, 유니온을 그대로 사용하면 Exhaustive check 에 의해서 아규먼트, 파라메터 둘 다 정상적으로 추론된다. (단 디스트럭쳐링 등을 사용하여 유니온 데이터 원형으로부터 분리되는 순간 깨진다.) Solution 2 분리를 하고싶다면, 타입 캐스팅과 Exhaustive check 을 섞는 방법도 있다.
type SomeType => type 선언부의 Generic 을 "A" 타입으로 사용하겠다. type SomeType = T extends "A" ? string : never; => SomeType 에 받은 Generic 이, "A" 라는 조건을 만족하면 string type, 아니라면 에러를 반환하겠다. 이 두가지와 Enum 을 활용해서 아래와 같이 Enum에 따라서 타입 추론이 되는 함수를 만들어 활용할 수 있다. 케이스가 좀 더 필요하다면 아래의 글도 참조하시라 https://velog.io/@bang9dev/Typescript-generic-with-function-logic