如何在TypeScript中创建泛型类型的可选函数参数?
合并TypeScript的Ok函数实现可选参数与自动泛型推导
你可以通过泛型默认值结合可选参数的方式,将两个Ok函数合并为一个,完全满足需求:
首先保留原有类型定义:
type Ok<T> = { ok: true; value: T }
然后实现合并后的Ok函数:
const Ok = <T = undefined>(value?: T): Ok<T> => { return { ok: true, value }; }
验证效果
调用示例完全符合预期:
const emptyOk = Ok() // 类型自动推导为 Ok<undefined> const okOne = Ok(1) // 类型自动推导为 Ok<number> const okString = Ok("test") // 类型自动推导为 Ok<string>
实现逻辑说明
- 泛型
T设置默认值undefined:当调用时不传入参数,TS会自动使用这个默认值,对应Ok<undefined>的类型需求。 - 参数
value标记为可选(?: T):允许函数在无参数的情况下被调用,传入参数时,TS会自动将参数类型赋值给泛型T。 - 返回值直接匹配
Ok<T>类型:无需额外类型断言,TS会自动根据泛型T推导返回值的结构类型。
这个方案可以直接扩展到你模拟Rust Result类型的需求,后续只需定义Err<E>类型,并将Result<T, E>设为Ok<T> | Err<E>即可。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

