typescript 有没有可能创建一个类型,我们可以根据第一个参数的类型键入第二个参数?

qacovj5a  于 2023-03-19  发布在  TypeScript
关注(0)|答案(1)|浏览(331)

第一个参数的类型定义了第二个参数的类型,我不希望它是一个类型参数,而希望它是一个泛型函数类型,这样它就可以被推断出来,而不需要被传递
我喜欢输入以下函数:

const addT = (a, b) => a + b
  • 可以是string | number
  • b应与typeof a相同

可以想到一些变体,但是没有一个是从参数的类型推断出来的。
一个一个一个一个一个x一个一个二个一个x一个一个三个一个x一个一个x一个四个一个
示例的Playground链接

yhuiod9q

yhuiod9q1#

我以前也遇到过类似的问题。尝试用泛型做的问题是:

  • T extends number并不一定意味着T是任何数字,它可能意味着T是3,例如add<3>(3,3),然后3+3不是3,所以结果不再是T。
  • T延伸字符串|在执行add<3|'a'>(3, 'a')时,number为真,但在本例中,结果是(强制后)字符串'3a',它也不是T

我最接近解决这个问题的是:

function add(a: string, b: string): string;
function add(a: number, b: number): number;
function add(a: any, b: any) {  
  return a+b;
}

Playground链接
这里的any只是让函数工作。TS将根据参数推断调用了哪个重载。据我所知,你只能使用前2个签名调用,使用其他任何签名调用它都应该出错。

相关问题