Присоединяйтесь к нашему каналу и погрузитесь в мир веб-разработки
Связь: @devmangx
Post #1182
1.11K
Типобезопасные переходы между состояниями с корректным автодополнением
@WebDev_Plus
// Type-safe state transitions
type IdleState = {
status: "idle";
connect: () => ConnectedState;
};
type ConnectedState = {
status: "connected";
send: (data: string) => ConnectedState;
disconnect: () => IdleState;
};
function createApi(): IdleState {
return {
status: "idle",
connect() {
const id = `${Date.now()}`;
// establish connection
return {
status: "connected",
send(data) {
// send data
console.log(`${data} (${id})`);
return this;
},
disconnect() {
// close connection
return createApi();
},
};
},
};
}
// Usage
const api = createApi();
api.connect().send("Hello world!").disconnect();
// ✅ Works!
api.send("Send without connect");
// ❌ TypeScript Error: Property 'send' does not exist
@WebDev_Plus







