You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中合并同功能不同类型函数,确保返回类型与输入一致

合并同功能不同类型的函数(保证输入输出类型匹配)

嘿,这个场景太常见了!你想要的不是单纯的联合类型,而是用泛型+类型约束来实现输入与返回值的类型绑定,这样就能把两个重复的函数合并成一个,同时严格保证类型一致性。

先来看改造后的代码:

// 先定义你的样式类型联合(如果还没定义的话)
type StyleType = ViewStyle | TextStyle;

function getStyle<T extends StyleType>(styles: T[]): T {
  return Object.assign({}, ...styles);
}

为啥这样管用?

这里的泛型T会自动推断你传入的数组类型——当你传ViewStyle[]时,T就是ViewStyle,返回值也会被严格限定为ViewStyle;传TextStyle[]时同理。完美解决了你“输入某一类型成员,返回值必须与之相同”的约束。

如果不用泛型,单纯用联合类型的话:

// 这种写法达不到你的要求!
function getStyle(styles: (ViewStyle|TextStyle)[]): ViewStyle|TextStyle {
  return Object.assign({}, ...styles);
}

TypeScript只能知道返回值是两种类型的联合,但没法关联输入和输出的具体类型,调用后你还得手动断言类型,完全不符合你的需求。

原代码对比

你原来的重复代码:

const getViewStyle = (styles: ViewStyle[]): ViewStyle => { return Object.assign({}, ...styles); };
const getTextStyle = (styles: TextStyle[]): TextStyle => { return Object.assign({}, ...styles); };

用泛型改造后,既保留了类型安全,又消除了代码冗余,一举两得~

内容的提问来源于stack exchange,提问作者Nick Dima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:00:12