/** * 最小 Result 实现 * 只覆盖本库用到的 API:ok / value / error / isOk / isError / map / getOrDefault, * 以及静态构造 Result.ok / Result.error。 */ export interface ResultOps { /** 类型守卫:收窄为 Ok,value 变为 T */ isOk(): this is Ok & this; /** 类型守卫:收窄为 Err,error 变为 E */ isError(): this is Err & this; /** 成功时映射值,失败时原样透传 */ map(fn: (value: T) => U): Result; /** 失败时返回默认值 */ getOrDefault(defaultValue: D): T | D; } export interface Ok extends ResultOps { readonly ok: true; readonly value: T; readonly error: undefined; } export interface Err extends ResultOps { readonly ok: false; readonly value: undefined; readonly error: E; } /** 成功或失败的判别联合,用 `ok` 判别,或用 isOk() / isError() 收窄 */ export type Result = Ok | Err; class ResultImpl { constructor( readonly ok: boolean, readonly value: T | undefined, readonly error: E | undefined ) {} isOk(): boolean { return this.ok; } isError(): boolean { return !this.ok; } map(fn: (value: T) => U): unknown { return this.ok ? new ResultImpl(true, fn(this.value as T), undefined) : this; } getOrDefault(defaultValue: D): T | D { return this.ok ? (this.value as T) : defaultValue; } } export const Result = { ok(value: T): Result { return new ResultImpl(true, value, undefined) as unknown as Result; }, error(error: E): Result { return new ResultImpl(false, undefined, error) as unknown as Result; }, };