常見的透過 TypeScript 的 discriminated union 進行型別資料的推導,透過型別的保護,避免產生拿到不正確的值。

type State =
  | { status: 'idle' }
  | { status: 'loading' }
  | { status: 'error'; error: string }
  | { status: 'success'; data: FlightData };

以範例來說會透過 status 判斷會有什麼其它的欄位可以使用。

const [state, setState] = useState<State>({ status: 'idle' });
 
state.status === 'error' && state.error ✅