【问题标题】:TypeScript: Type with callback with generically optional parameterTypeScript:带有一般可选参数的回调类型
【发布时间】:2021-01-22 10:57:06
【问题描述】:

我在这里找到了许多类似的问题,但我找不到我的特定问题。我想要一个泛型类型,它定义了其回调所采用的参数类型,并且“无参数”应该是一个选项。

我不想要的:回调参数是可选的,因为当回调被调用时,参数可以传递或不传递

我想要的:当我指定泛型参数时,我希望能够说回调不能带参数。

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,但我认为我的问题比这个高一级。

我该怎么做?

【问题讨论】:

    标签: typescript generics callback optional-parameters


    【解决方案1】:

    我猜你在找conditional types:

    type Caller<T> = (
        callback: T extends void ? () => void : (params: T) => void
    ) => void
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 2022-11-05
      • 2012-09-27
      相关资源
      最近更新 更多