首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回类型与TypeScript中的输入类型相同

返回类型与TypeScript中的输入类型相同
EN

Stack Overflow用户
提问于 2018-03-29 20:29:26
回答 4查看 4.8K关注 0票数 5

我有两个函数做同样的事情,唯一的区别是输入类型和返回类型是不同的。我想知道如何将这些函数“合并”成一个,其中一个想法是使用联合类型,但我的约束是,当输入是联合的一个成员时,返回的值必须是相同的。

代码语言:javascript
复制
const getViewStyle = (styles: ViewStyle[]): ViewStyle => {
  return Object.assign({}, ...styles);
};

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

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-10-03 14:14:52

这对我来说很管用。所有的功劳都归于马吕斯舒尔茨- https://blog.mariusschulz.com/2016/08/18/function-overloads-in-typescript#version-4-function-overloads

代码语言:javascript
复制
function getStyle(styles: ViewStyle[]): ViewStyle;
function getStyle(styles: TextStyle[]): TextStyle;
function getStyle(styles: ViewStyle[] | TextStyle[]): ViewStyle | TextStyle {
    return Object.assign({}, ...styles);
}
票数 2
EN

Stack Overflow用户

发布于 2018-03-29 20:45:04

你可以这样做:

代码语言:javascript
复制
const flattenObjectsToSingle = <T>(items: T[]): T => { ...
票数 11
EN

Stack Overflow用户

发布于 2020-01-02 10:52:31

泛型和推断类型的混合将是最好的。如果您期望在使用该函数时返回其中一种类型,则接受的答案将允许类型文本链接器继续抱怨。

因此,在我看来,这将是最好的答案:

代码语言:javascript
复制
const getStyle = <T extends TextStyle | ViewStyle >(styles: T[]): T => { 
      return Object.assign({}, ...styles);
};

这句话的基本意思是,函数期望得到一个TextStyle或ViewStyle数组,并返回一个给定类型的记录。

这要归功于YouTube:https://www.youtube.com/watch?v=nViEqpgwxHE上的Ben视频

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49564509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档