UNPKG

@cloudbase/js-sdk

Version:
49 lines (46 loc) 1.77 kB
import { ICloudbaseError } from './error' /** * `{ data, error }` 统一返回结构(可辨识联合 / Discriminated Union)。 * * 判别字段为 `error` 是否为 `null` * - 成功:`{ data: T; error: null }` * - 失败:`{ data: null; error: E }` * * @example * ```ts * const res = await sdk.callFunction<{ n: number }>({ name: 'foo' }) * if (res.error === null) { * // 此处 res.data 被自动收窄为 { n: number }(非 null) * console.log(res.data.n) * } else { * // 此处 res.data 被收窄为 null,res.error 为 E * console.error(res.error.message) * } * ``` * * @typeParam T - 成功时的数据类型 * @typeParam E - 失败时的错误类型,默认 `ICloudbaseError` */ export type Result<T, E extends ICloudbaseError = ICloudbaseError> = | { data: T; error: null } | { data: null; error: E } /** * 安全解构变体:失败分支的 `data` 不是 `null`,而是把成功 shape 的每个字段映射成 `null` * * 这样即使不先判空 `error`,也能安全解构成功结构里的字段(值可能为 `null`): * * @example * ```ts * // 无需先判 res.data === null 即可解构 * const { data: { user, session } } = await auth.signInWithPassword({ ... }) * ``` * * 该类型用于「已有 `{ data: { ... } }` 嵌套结构、需要平滑升级为判别联合」的场景(如 auth)。 * 相比 `Result<T>`,它对既有解构代码是**非破坏性**的升级。 * * @typeParam T - 成功时的数据结构(必须为对象) * @typeParam E - 失败时的错误类型,默认 `ICloudbaseError` */ export type SafeResult<T extends object, E extends ICloudbaseError = ICloudbaseError> = | { data: T; error: null } | { data: { [K in keyof T]: null }; error: E }