在TypeScript的函数签名中重构类型参数。

问题描述 投票:0回答:1

考虑下面这个反转一对的函数。我正在寻找一种方法来定义输入和输出的别名,这种别名可以在函数主体和函数的类型签名中使用。

function reverse<A, B>([a, b]: [A, B]): [B, A] {
  return [b, a];
}

我希望能够将输入和输出类型作为类型参数传递给反转函数,因为这对调用者来说比 AB 的,更像是两者的实现细节。

function reverse<I extends [infer A, infer B], O implements [B, A]>([a, b]: I): O {
  return [b, a];
}

作为实验,我试着做了下面的工作。然而,这并不奏效,因为不能保证输出的结果是 延伸 [B, A].

function reverse<A, B, I extends [A, B], O extends [B, A]>([a, b]: I): O {
  return [b, a];
}

是否有其他方法可以使之工作?

typescript destructuring
1个回答
0
投票

为什么不简单的为Tuples创建类型别名?

type Tuple<Y, Z> = [Y, Z];

function reverse<A, B>([a, b]: Tuple<A, B>): Tuple<B, A> {
    return [b, a];
}

或者甚至

type Tuple<Y, Z> = [Y, Z];
type ReverseTuple<Y, Z> = [Z, Y];

function reverse<A, B>([a, b]: Tuple<A, B>): ReverseTuple<A, B> {
    return [b, a];
}
© www.soinside.com 2019 - 2024. All rights reserved.