当需要第二个通用参数时,如何仅用一个通用参数调用通用函数?

时间:2020-07-01 09:29:42

标签: typescript generics typescript-generics

我有一个带有两个参数的通用函数。第二个基于第一个参数的值。

该代码仅适用于一个 type变量,但是当我添加另一个变量时,无法调用该函数。

这很完美:

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

function test<U extends input>(module: U, event: Event<U>) {
  //...
}

//No errors
test('number', 2);

// Generates error as expected
test('string', 2);

但是当需要另一个通用变量时,我们会出错:

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

function test<T, U extends input>(module: U, event: Event<U>) {

  // The subject factory returns a new Rxjs Subject
  return subjectFactory<T>(module + '-' + event);
}

// Works without any generic parameter
const s1 = test('number', 2);

// Expected 2 type arguments, but got 1
const s2 = test<MyType>('number', 2);

我需要在没有第二个通用参数的情况下调用该函数。怎么样?

0 个答案:

没有答案