一个通用游戏-没有提供正确的参数类型(未知)



这是操场

我有一个由两个函数组成的通用参数类型,一个接受两个参数,另一个只接受一个:

const fn =
<K, P, R>(inputfn: ((key: K) => R) | ((key: K, params: P) => R)) 

在这个函数中还有一个叫做get的函数

function get(params: P)

fn正在返回:

const fn =
<K, P, R>(inputfn: ((key: K) => R) | ((key: K, params: P) => R)) =>
(api: K) => {
function get(params: P) {
return 'get'
}
return get
}

以下是一些用例:

const get1 = fn((key: string, params: string) => ({ [key]: params }))('foo') // giving parameter correct type
const get2 = fn((key: string, params?: string) => ({ [key]: params }))('foo') // giving parameter correct type
const get3 = fn((key: string) => ({ [key]: 'params' }))('foo') // providing unknown as parameter type

正如您所看到的,最后一个是给我params: unknown作为get3函数的类型信息

你如何让TS正确地推断这一点?

编辑正确地说,我指的基本上是undefined。我不想让TS抱怨我在调用get3时没有提供任何论据

(感谢@caTS(

通过将泛型类型默认为void:解决

<K, R,  P = void>(inputfn: (...)

更多阅读此处

可选通用型

https://garbagevalue.com/blog/optional-generic-typescript

相关内容

  • 没有找到相关文章

最新更新