// explicit-return export interface Result { isOk: () => this is Ok; isErr: () => this is Err; unwrap: () => T; } export class Ok implements Result { constructor(readonly value: T) {} isOk() { return true as const; } isErr() { return false as const; } unwrap() { return this.value; } } export class Err implements Result { constructor(public error: E) {} isOk() { return false as const; } isErr() { return true as const; } unwrap(): never { throw new Error("unwrap...."); } } const idk = maybeIdk(); if (idk.isOk()) { if (idk.isOk()) { // Unnecessary conditional, value is always truthy. } console.log(idk); console.log(idk.value); } const idk2 = maybeIdk(true); if (idk2.isErr()) { console.error(idk2); console.error(idk2.error); } export function maybeIdk(beep?: boolean): Result { if (beep) { return new Err(new Error("beep")); } return new Ok("boop"); }