Files
type-level-demo/07-typestate-ts/main.ts
T

31 lines
809 B
TypeScript

type State = "locked" | "unlocked";
class CredentialManager<S extends State> {
private readonly state?: S;
unlock(this: CredentialManager<"locked">, master_key: string) {
return this as unknown as CredentialManager<"unlocked">;
}
set(this: CredentialManager<"unlocked">, key: string, value: any) {
// ...
}
get(this: CredentialManager<"unlocked">, key: string): string | undefined {
// ...
return undefined;
}
lock(this: CredentialManager<"unlocked">): CredentialManager<"locked"> {
return this as unknown as CredentialManager<"locked">;
}
}
function main2() {
let pw_locked = new CredentialManager<"locked">();
let pw_unlocked = pw_locked.unlock("psst");
pw_unlocked.set("foo", "bar");
let val = pw_unlocked.get("foo");
pw_locked = pw_unlocked.lock();
}