首页 > 解决方案 > 键入'字符串 | number' 不可分配给类型 'ReturnType'

问题描述

我试图理解打字稿的条件泛型,所以我编写了一个函数来调用Cat使用方法名称字符串的方法。

// union of all methods names in T
type Methods<T> = {
    [K in keyof T]: T[K] extends (...args: any) => any ? K : never;
}[keyof T];

type Cat = {
    meow(n: string): string;
    eat(n: number): number;
};

function foo<M extends Methods<Cat>>(c: Cat, method: M, ...params: Parameters<Cat[M]>): ReturnType<Cat[M]> {
    return c[method](...params);
}

这里已知M是 中的方法名Cat,typescript 能够在类型签名中确定其参数和返回类型。但在表达式中c[method](...params),它似乎忘记了我们调用的是什么方法,所以返回string | number。为什么会发生这种情况,我该如何解决?

标签: typescripttypescript-generics

解决方案


推荐阅读