Typescript泛型返回类型问题



我在项目中使用了typescript泛型,但它似乎不太好用。

示例:

interface Test<T, P> {
a?: (v: T) => P
b?: (v: P) => void
}
const fn1 = <T, P>(_config: Test<T, P>) => {}
fn1({
a: (p) => 1,
b: (p) => {},
})

我认为params 'a'类型就像:

Test<unknown, number>.a?: ((v: unknown) => number) | undefined

但是,实际上:

Test<unknown, unknown>.a?: ((v: unknown) => unknown) | undefined

我不知道为什么,有人可以帮我吗?谢谢

这是因为在并集中,一个未知元素吸收了所有元素

对于(a(中的p,TypeScript推断出";数字";,但是对于(b(中的P,它推断出一种类型的"P";"未知";,正如它在(a(中对T所做的那样。

因此p导致";数字|未知";(而不是你所期望的"数字|未定义"(,这只会导致";未知";。

如果你在这里参考TypeScript文档,你会发现:

//在并集中,一个未知吸收了的所有内容

类型p=未知|数字;//未知

由于您没有在此行中定义类型:b: (p) => {}

则TS无法推断p的类型,即使您在上面的a定义中返回了它。

相关内容

  • 没有找到相关文章

最新更新