相关疑难解决方法(0)

扩展(映射)元组类型

在泛型函数中使用元组类型时,如何“扩展”源类型?

假设我们想要创建一个 RxJS 映射运算符,它返回源可观察值以及另一个映射值:

export function mapExtended<T, R>(mapping: (input: [T]) => R): OperatorFunction<[T], [T, R]>;
export function mapExtended<T1, T2, R>(mapping: (input: [T1, T2]) => R): OperatorFunction<[T1, T2], [T1, T2, R]>;
export function mapExtended<T1, T2, T3, R>(mapping: (input: [T1, T2, T3]) => R): OperatorFunction<[T1, T2, T3], [T1, T2, T3, R]>;
export function mapExtended<R>(mapping: (input: any) => R): OperatorFunction<any, {}> {
    return (source$: Observable<any>) => source$.pipe(
        map(input => {
            const mappingResult = mapping(input);
            return [...input, mappingResult];
        }),
    );
}
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但未正确检测到过载。的返回类型test是, …

rxjs typescript

3
推荐指数
1
解决办法
1058
查看次数

类型的打字稿扩展运算符

我试图定义一个类型,它获取一个函数类型作为泛型参数,并返回一个与输入函数类型相同的函数类型,只是它最后多了一个参数:

  type AugmentParam<F extends (...args: any[]) => any, ExtraParam> = F extends (
    ...args: infer Args
  ) => infer R
    ? (
        ...args: [
          ...Args,
          ExtraParam
        ]
      ) => R
    : never
Run Code Online (Sandbox Code Playgroud)

用法示例:

type F = (x: number) => boolean
type F2 = AugmentParam<F, string> // (x: number, arg2: string) => boolean
Run Code Online (Sandbox Code Playgroud)

...Args 似乎不起作用,但是如果我将其更改为这样的内容,它会起作用:

type F = (x: number) => boolean
type F2 = AugmentParam<F, string> // (x: number, arg2: string) => boolean
Run Code Online (Sandbox Code Playgroud)

但它只适用于特定数量的参数,我需要为每个 n 元函数定义一个这样的类型。

typescript typescript-generics typescript-typings

3
推荐指数
1
解决办法
4943
查看次数