typescript7 [ts, fp] @fp-ts/schema를 사용한 안전한 데이터 유효성 검사, 변환 선행으로 Either과 Option에 대한 이해가 필요합니다. fp-ts가 3버전으로 개발하면서 기존의 io-ts를 fp-ts/schema가 대체하게 된다. 아직 레포가 생성된지 오래되지 않아 부족한 것이 있겠지만, 기존의 io-ts보다 훨신 진일보한 모습에 반해 파고들게 되었다. zod에 대비해 뚜렷한 강점도 보이고 fp-ts를 기존에 사용하던 유저라면 같이 쓰기에 훨신 강력할 수 있을 것 같다. 사용하기에 앞서 먼저 사전 지식에 대해 설명하겠다. 0. AST AST 유형은 ADT(대수 데이터 유형), 즉 구조체 및 튜플과 같은 공용체에 대한 명세서이다. Schema에서의 AST는 더 대략적이고 작은 부분을 다룬다. 밑에 설명할 Schema는 AST의 wrapper라고 이해하면 쉽다. 1. Schema.. 2023. 2. 6. Module Augmentation와 Interface Merge를 활용한 bottom - up 식 구현 모듈의 interface에 merge 함으로써 타입을 관리하면 더 강력한 추상화와 중앙집권식이 구조가 아닌 개별 관리 구조를 가져갈 수 있다. (bottom - top) remix.run 프레임워크를 사용한 예제이나, 해당 프레임워크를 몰라도 상관없습니다. app/service/api.ts export interface ApiFns {} export type ApiFnKeys = keyof ApiFns; export type ApiProps = { [key in ApiFnKeys]: Parameters[0]; }; export type Method = { method: M }; type ApiMethod = { [key in ApiFnKeys]: ApiFns[key]['method']; }; /* ..... 2022. 7. 24. ts) N차 함수 N번째 항에서 함수합성하기 두 개의 함수가 있다고 해보자. f: A -> B -> C g: C -> D 이 두 함수를 합성한다면 f∘g: A -> B -> D 처럼 된다. 문제는 이것을 typescript에서 어떻게 합성하냐인데.. 흔히 함수 합성에 자주 사용되는 pipe, flow를 사용하면 다음과 같이 해야한다. (pipe나 flow는 특정 함수의 이름이 아닌, 프로그래밍 언어 공통적으로 통용되는 기능의 용어이다. 그러므로 lodash, ramda, fp-ts 등의 많은 유틸리티 라이브러리에서 제공된다.) const f = (a: number) => (b: string) => new Array(a).fill(b) const g = (arr: string[]) => arr.map(str => ({data: str})) // co.. 2022. 5. 25. typescript generic의 사용 예와 identity function을 사용한 제네릭 인자 추론 // 1. 타입을 추론하는 함수는 다음과 같이 작성 type MakeTuple = (v: T) => [T, T] const makeTuple: MakeTuple = (v) => [v, v] // OK const tenTuple = makeTuple(10) // type: [number, number] // 2. 타입을 선언시 명시하고 싶다면 type TypedMakeTuple = (v: T) => [T, T] const makeNumberTuple: TypedMakeTuple = (v) => [v, v] const oneTuple = makeNumberTuple(1) // type: [number, number] // _MakeTuple은 망한 코드 (에러나 경고는 안남... 걍 주의하세요) // _Ma.. 2022. 5. 15. 이전 1 2 다음