说我有以下代码:
export interface Semigroup<A> {
append: (x: A, y: A) => A;
}
const arraySemigroup: Semigroup<Array<any>> = {
append: (x, y) => x.concat(y)
}
除了数组的any
之外,这是很好的。
有没有办法,我可以为数组指定泛型类型参数?
答案 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
功能。