"Hook 이 React 자체로 타입 붙음. 너의 일은 옳은 초기 값 주는 거."
useState 타입
useState 가 초기 값에서 state 타입 추론. useState(0) 가 `[number, DispatchuseState('hi') 가 `[string, ...]`. 초기 값이 너무 좁거나 (null, undefined) union 원하면 명시 generic 전달: useState<User | null>(null).
useReducer 타입
useReducer 의 타입이 reducer signature 에서 옴. function reducer(state: State, action: Action): State { ... }. useReducer(reducer, initialState) 가 reducer 에서 state 와 action 타입 둘 다 추론. `Action` 의 discriminated union 이 reducer 안에서 exhaustive case 체크 줘.
Custom hook
Custom hook 이 `use` 로 시작하는 이름의 함수, 다른 hook 호출. 다른 어떤 함수처럼 타입 붙여. function useUser(id: number): { user: User | null; loading: boolean }. State+setter 쌍엔 tuple 반환: function useCounter(initial: number): [number, () => void].
React 의 타입이 광범위하고 정확. Hook 이 타입 잃으면 아마 어딘가 `any` 전달했어. 어디 추적해서 그거 고치면 나머지 통해 타입이 옳게 흐름.