31 lines
809 B
TypeScript
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();
|
|
}
|