打字稿是否支持参数多态

时间:2018-04-14 15:37:02

标签: typescript functional-programming

说我有以下代码:

export interface Semigroup<A> {
  append: (x: A, y: A) => A;
}

const arraySemigroup: Semigroup<Array<any>> = {
  append: (x, y) => x.concat(y)
}

除了数组的any之外,这是很好的。

有没有办法,我可以为数组指定泛型类型参数?

1 个答案:

答案 0 :(得分:1)

看起来你可以使用TypeScript 2.8的条件类型来做到这一点。基于他们在发行说明中使用的一个示例,我提出了这个解决方案:

interface BoxedValue<T> {
  append: (x: T, y: T) => T;
};
interface BoxedArray<T> {
  append: (x: T, y: T) => T;
};
type Boxed<T> = T extends (infer U)[] ? BoxedArray<U> : BoxedValue<T>;

const boxedNumber: Boxed<number> = {
  append: (x: number, y: number): number => {
    return x + y
  }
}

const boxedNumberArray: Boxed<number[]> = {
  append: (x: number, y: number): number => {
    return x + y
  }
}

可以在此处看到发布说明:http://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html他们会显示Boxed示例,但他们不会在该示例中使用infer功能。