// 1. 타입을 추론하는 함수는 다음과 같이 작성
type MakeTuple = <T>(v: T) => [T, T]
const makeTuple: MakeTuple = (v) => [v, v] // OK
const tenTuple = makeTuple(10) // type: [number, number]
// 2. 타입을 선언시 명시하고 싶다면
type TypedMakeTuple<T> = (v: T) => [T, T]
const makeNumberTuple: TypedMakeTuple<number> = (v) => [v, v]
const oneTuple = makeNumberTuple(1) // type: [number, number]
// _MakeTuple은 망한 코드 (에러나 경고는 안남... 걍 주의하세요)
// _MakeTuple<T>와 <T>(v:T)에서의 T는 명백히 다른 T이며 _MakeTuple<T>의 T는 버려진다.
type _MakeTuple<T> = <T>(v: T) => [T, T]

위 코드에서의 3번 방식인 identity function을 활용하면 형태(타입클래스)는 지키면서 세부 구현에 대한 제네릭 인자는 추론을 맡길 수 있다.
위에서 나온 타입클래스가 무엇인지에 대한 내용은 여기에 잘 설명되어 있다. (type이나 class가 아닙니다)
https://paulgray.net/typeclasses-in-typescript/
'개발 > typescript, web' 카테고리의 다른 글
remix ssr에서 esmodule 패키지 사용하기 (ex: swiper) (0) | 2022.06.16 |
---|---|
ts) N차 함수 N번째 항에서 함수합성하기 (2) | 2022.05.25 |
fp-ts를 통해 함수형 프로그래밍 용어 정리 (0) | 2022.05.08 |
식별할 수 있는 문자열(문자열 리터럴) 확인하는 방법 (0) | 2022.04.22 |
컴포넌트 내의 모든 이미지 렌더링 된 이후 감지하는 훅 (0) | 2022.03.28 |