这是操场
我有一个由两个函数组成的通用参数类型,一个接受两个参数,另一个只接受一个:
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