【问题标题】:Add a peramater to type alias添加参数以键入别名
【发布时间】:2020-05-04 20:39:15
【问题描述】:

我正在使用类型为

的库中的函数
type QueryFetcher = (query: string, variables?: Record<string, any>) => Promise<QueryResponse> | QueryResponse;

我想在不编辑源文件中的类型声明的情况下为该类型添加一个附加参数。

我想我可以做类似的事情

type WithHeader = (header: string) => Promise<QueryResponse> | QueryResponse

type QueryFetcherWithHeader = QueryFetcher & WithHeader

这会产生

(query: string, variables?: Record<string, any>, header: string) => Promise<QueryResponse> | QueryResponse;

但是没有

很明显,这里有些东西我不明白,但我找不到东西

【问题讨论】:

  • QueryFetcher &amp; WithHeader 必须是一个既可用作QueryFetcher 又可用作WithHeader 的函数。这意味着您可以将其称为f("query", {variable: ""}),也可以将其称为f("header")。这些都不是你想要的签名。以编程方式附加到参数列表实际上是不可能的(尤其是使用可选参数),至少不会比仅手动编写预期的QueryFetcherWithHeader 签名差很多。有了用例的更多细节,我可能会提出更好的建议,但现在我不知道还有什么建议。
  • &amp; 是一个交集运算符,但它不能像您想象的那样使用函数。为什么不import QueryResponse 手动声明函数签名。

标签: typescript function type-alias


【解决方案1】:

交集类型不适用于函数。为什么不可以如下创建自己的类型。

type QueryFetcher = (query: string, variables?: Record<string, any>) => Promise<QueryResponse> | QueryResponse;

type QueryFetcherWithHeader = (query: string, variables?: Record<string, any>, header: string) => Promise<QueryResponse> | QueryResponse;

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 2012-11-07
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多