@kp-kit/result
v0.1.1
Published
提供类型安全、灵活的类似 [Rust Result](https://doc.rust-lang.org/std/result) 类型实现
Readme
@kp-kit/result
提供类型安全、灵活的类似 Rust Result 类型实现
特性
- 类型安全
- 优雅且强制的处理错误
安装
npm install @kp-kit/result或使用 bun:
bun add @kp-kit/result快速开始
import { ok, err, Result } from '@kp-kit/result';
function divide(a: number, b: number): Result<number, string> {
if (b === 0) {
return err('DIVISION_BY_ZERO', '不能除以零');
}
return ok(a / b);
}
const result = divide(10, 2);
if (result.isOk()) {
console.log(result.value); // 5
} else {
console.log(result.code, result.message); // 错误信息
}API
类型
Result<Value, Code>: 结果抽象类,表示可能成功或失败的结果Ok<Value>: 成功结果Err<Code>: 错误结果
工厂函数
ok(value?): 创建成功结果err(code?, message?, cause?): 创建错误结果
实例方法
isOk()
判断结果是否为成功(Ok)。返回布尔值,并自动类型收窄。
const result = ok(123);
if (result.isOk()) {
// result 类型被收窄为 Ok
console.log(result.value); // 123
}isErr()
判断结果是否为失败(Err)。返回布尔值,并自动类型收窄。
const result = err('E', 'fail');
if (result.isErr()) {
// result 类型被收窄为 Err
console.log(result.message); // fail
}unwrap(default?)
解包成功值。若为 Ok,返回其值;若为 Err,无参数时抛出异常,有参数时返回默认值或调用默认函数。
ok(1).unwrap(); // 1
err('E').unwrap(42); // 42
err('E').unwrap(() => 'default'); // 'default'
err('E').unwrap(); // 抛出 Err 异常expect(message?)
解包成功值。若为 Ok,返回其值;若为 Err,抛出异常并可自定义错误信息。
ok(1).expect(); // 1
err('E').expect('出错了'); // 抛出 Err,message 字段为 '出错了'map(fn)
对成功值进行转换,返回新的 Result。若为 Err,原样返回。
ok(2).map((x) => x * 10); // Ok(20)
err('E').map((x) => x * 10); // Err('E')mapErr(fn)
对错误进行转换,返回新的 Err。若为 Ok,原样返回。
err('E', 'fail').mapErr((e) => err('NEW', 'new error')); // Err('NEW', 'new error')
ok(1).mapErr((e) => err('NEW')); // Ok(1)toPromise()
将 Result 转为 Promise。Ok 时 resolve,Err 时 reject。
await ok(1).toPromise(); // 1
await err('E').toPromise(); // 抛出 Err静态方法
Result.is(obj): 判断对象是否为 Result
