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

时间:2018-03-29 20:29:27

标签: typescript union-types

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

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

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

4 个答案:

答案 0 :(得分:2)

你可以这样做:

const flattenObjectsToSingle = <T>(items: T[]): T => { ...

答案 1 :(得分:2)

这对我有用。所有功劳归Marius Schulz-https://blog.mariusschulz.com/2016/08/18/function-overloads-in-typescript#version-4-function-overloads

function getStyle(styles: ViewStyle[]): ViewStyle;
function getStyle(styles: TextStyle[]): TextStyle;
function getStyle(styles: ViewStyle[] | TextStyle[]): ViewStyle | TextStyle {
    return Object.assign({}, ...styles);
}

答案 2 :(得分:1)

如果我理解正确的话......

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

请参阅http://www.typescriptlang.org/docs/handbook/advanced-types.html了解更多精彩内容

答案 3 :(得分:1)

最好将泛型和推断类型混合使用。如果您希望在使用函数时返回其中一种类型,则可接受的答案将使打字机的lint不断抱怨。

所以,我认为这是最好的答案:

const getStyle = <T extends TextStyle | ViewStyle >(styles: T[]): T => { 
      return Object.assign({}, ...styles);
};

这基本上是说该函数需要一个TextStyle或ViewStyle数组,并返回给定类型的记录。

信贷转到YouTube上的Ben Awad视频:https://www.youtube.com/watch?v=nViEqpgwxHE