【问题标题】:Defining second parameter as a conditional type based on the value of the first paramenter根据第一个参数的值将第二个参数定义为条件类型
【发布时间】:2020-10-21 15:33:33
【问题描述】:

我有一个带有两个参数的函数。我想根据第一个参数的值将第二个参数的类型设置为条件类型。这怎么可能

这是示例代码:

type Event<T> = T extends 'string'? string : number;

function test(module:'string'|'number', event:Event<typeof module>)
{
  //...
}

// The second argument is of type string | number
// But it should be string
test('string',2)

第二个参数的类型总是string|number

【问题讨论】:

  • 你能再使用泛型吗?test&lt;T extends 'string'|'number'&gt;(module: T, event: Event&lt;T&gt;)

标签: typescript typescript-generics


【解决方案1】:

你可以使你的函数通用来解决这个问题。

function test<T extends string | number>(module: T, event: Event<T>) {
    // ...
}

【讨论】:

  • 请注意,OP 使用的是字符串文字类型,而不是联合类型。
  • 这样就解决了问题。但是当函数本身是泛型的时候呢?像这样:function&lt;T,U&gt;(module: U, event: Event&lt;U&gt;)。那么我怎样才能调用只传递一种类型的函数呢? test&lt;User&gt;('string', 2) 产生错误
  • @rostamiani 你是什么意思“函数本身是通用的”?你的定义中似乎没有使用T,那有什么意义呢?
  • @jonrsharpe 因为这似乎是另一个问题,我在这里问它:stackoverflow.com/questions/62673801/…
猜你喜欢
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 2018-05-02
  • 2022-10-04
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2023-02-13
相关资源
最近更新 更多