Skip to content

isResult

检查一个值是否为 Result 元组

217 bytes
since v12.2.0

用法

检查一个值是否为 Result 元组。

不知道这是什么? 请阅读下方 Result 章节。

import * as _ from 'radashi'
_.isResult([undefined, 42]) // => true
_.isResult([new Error(), undefined]) // => true
// 元组长度必须为 2。
_.isResult([new Error()]) // => false
_.isResult([undefined, true, undefined]) // => false
// 非元组值均为 false。
_.isResult([]) // => false
_.isResult({}) // => false
_.isResult(null) // => false
// Result 元组不能同时包含值和错误。
_.isResult([new Error(), true]) // => false

另请参阅相关的 isResultOkisResultErr 函数。

类型详解

Result

“Results”是包含 2 个元素的元组(一个错误和一个结果值)。

  • 第一个元素始终是错误,如果操作成功则为 undefined
  • 第二个元素始终是结果值,除非发生了错误。
  • 这些元组由 Result<TResult, TError> 类型表示。
  • 当未显式定义错误类型时(例如 Result<string>),默认使用 Error 作为错误类型。

Ok 和 Err

有两种结果类型:Ok<TResult>Err<TError>

  • Ok 类型表示操作成功。它是 [undefined, TResult] 元组。
  • Err 类型表示操作失败。它是 [TError, undefined] 元组。

名称“Ok”和“Err”的灵感来源于 Rust 的 std::result 模块。

要检查是否为 Ok 结果,请这样做:

declare const value: unknown
if (isResult(value) && value[0] == null) {
value // <-- 现在类型为 Ok<unknown>
value[1] // <-- 这是结果值!
}

要检查是否为 Err 结果,请这样做:

declare const value: unknown
if (isResult(value) && value[0] != null) {
value // <-- 现在类型为 Err<Error>
value[0] // <-- 这是错误!
}

你也可以分别使用 isResultOkisResultErr 函数来检查 OkErr 结果。