常見的透過 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 ✅