모든것은
try {
} catch (err) {
}
에서 시작이됬음
err는 타스 4.4 전에는 any 타입이고
자바스크립 특성상 모든 데이터타입이 throw 가능 하기에 처음부터 에러는 에니로 시작되게됨 (프로미스 쓸때도 마찬가지)
에러가 에니 타입인 이유만으로 타입스크립트 프로그램 버그 50%는 이거에서 나왔을거임 ㅇㅇ
그래서 개발자들이 에러 타입 좁힌다고 에니 타입 위에다가
class XibaError extends Error
if err instanceof XibaError 식으로 가딩 하는거 했지만 컴파일 타임에서 잡아주질 않는데 효율성은 크지는 않았음 ㅇㅇ (지금 타스 쓰는 회사는 거의 이정도 까지 할듯)
그래서 4.4 이후에 타스에서 기본적으로 에러는 unknown
여기서 부터 조금더 타입세이프 에러 핸들링 근접해가기 하는데 아직 까지 유치원생 수준
언노운 헨들링 하려면 타입가드로 핸들리 하고
if isApolloError(err)
이렇게 하면 가딩된 스코프 안에서는 아폴로 에러로 타입세이프 해짐
그래도 결국에는 트라이 문에 존제하는 모든 에러 케이스 페턴을 사람이 리뷰를 통해 찾아내는건 한계가 있고 아직도 이것때문에 생기는 버그는 한 40% 는 될거임 ㅇㅇ
이후에 타입스크립트에서 고급 인력만 쓰라고 discriminated union 만들어줌
왜냐면 타입스크립트에서 enum 은 adt가 아니라 러스트처럼 에러 컨텍스트를 줄수가없음
그래서 저 유니언 써서 타입 세이프 에러 하려는데
consumer/내 코드는 neverthrow 랑 유니언 + ts-pattern 으로 컴파일타임에 페턴메칭 한다해도
이미 타입스크립트는 이 정반대 방향으로 몇십년을 흘러왔고 (뭐 거의 모든 오오피 언어가 비슷)
이코시스탬 모든 거대 라이브러리는 이런 에러핸들링이란 찾아볼수가없고 그걸 전부 리펙토링은 타스를 처음부터 다시시작이랑 마찬가지라 거의 늦었다고 봐도 됨 ㅇㅇ
그렇다고 타스가 러스트 방향으로 급 유턴 한다하면 유저베이스 전부 잃을수도있음
왜냐면 타스의 매력포인트는 함슬람 아무것도 모르는 뉴비도 바로 쓸수있는데 그위에 타이핑 살짝 후추 뿌리듯이 해놓은 매력이라
그걸 없애면 마케팅이 안되지
그래서 페턴메칭이 그렇게 나오기가 힘든거임 타스에서
리컬지브 타입으로 유니언 좁혀가는게 티에스페턴인데 문제는 테이스페턴 코드를 안쓰면 타스 컴파일러 자채가 그걸 잡아주질 않으니 결국 코딩스타일 리뷰만 늘어남
글을 재밌에 쓰네 XibaError zzzzzzzzzz
오 재밌다 ㅋㅋㅋㅋ 그래도 쌩 js보단 나으니 걍 써야지 어쩔수 있나
XIBA
neverthrow 이제 알았네 굳
에러 타입을 discriminated union으로 처리하는 방향이 이상적이다 이거지?
어쩐지 불편하다해서 원래 이런가보다했는데.. 요런 스토리와 방법이 있었군요.. 호옹