TypeScript:使用带有通用可选参数的回调类型
TypeScript: Type with callback with generically optional parameter
我在这里发现了很多类似的问题,但我找不到我的具体问题。我想要一个通用类型,它定义了回调所采用的参数类型,并且“无参数”应该是一个选项。
我不想要的:回调参数是可选的,在调用回调时,可以传递或不传递参数
我想要的:当我指定泛型参数时,我希望能够说回调必须不带任何参数。
type Caller<T> = (
callback: (params:T)=>void
) => void
// none of this works:
let caller1:Caller<void> = function(
callback: ()=>void
){}
let caller2:Caller<never> = function(
callback: ()=>void
){}
let caller3:Caller<undefined> = function(
callback: ()=>void
){}
// this works-ish but is ugly:
let caller4:Caller<void> = function(
callback: (_:void)=>void
){}
我也看过这个https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html但是我觉得我的问题比这个高一级
我该怎么做?
我想你正在寻找 conditional types:
type Caller<T> = (
callback: T extends void ? () => void : (params: T) => void
) => void
我在这里发现了很多类似的问题,但我找不到我的具体问题。我想要一个通用类型,它定义了回调所采用的参数类型,并且“无参数”应该是一个选项。
我不想要的:回调参数是可选的,在调用回调时,可以传递或不传递参数
我想要的:当我指定泛型参数时,我希望能够说回调必须不带任何参数。
type Caller<T> = (
callback: (params:T)=>void
) => void
// none of this works:
let caller1:Caller<void> = function(
callback: ()=>void
){}
let caller2:Caller<never> = function(
callback: ()=>void
){}
let caller3:Caller<undefined> = function(
callback: ()=>void
){}
// this works-ish but is ugly:
let caller4:Caller<void> = function(
callback: (_:void)=>void
){}
我也看过这个https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html但是我觉得我的问题比这个高一级
我该怎么做?
我想你正在寻找 conditional types:
type Caller<T> = (
callback: T extends void ? () => void : (params: T) => void
) => void