In F#, you can do this:
type DeliveredOrderData =
{
OrderId: int;
DateDelivered: DateTime;
}
type UndeliveredOrderData =
{
OrderId: int;
}
type Order =
| Delivered of DeliveredOrderData
| Undelivered of UndeliveredOrderData
and then I can create functions that return depending on the state:
let putOnTruck order =
match order with
| Undelivered {OrderId=id} ->
OutForDelivery {OrderId=id}
| Delivered _ ->
failwith "package already delivered"
I get how to create types in TypeScript, but how can I do the same as above?
const putOrderOnTruck = (order: UndeliveredOrder) => {
// how can I make sure order is really UndeliveredOrder?
}