Typescript String Литеральный тип в обобщенной функции c - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть функция с одним общим параметром c, но с двумя параметрами функции. Когда я использую «String Literal Type», два параметра функции могут иметь разные значения:

function func2<T extends 'A' | 'B'>(x: T, y: T): void { }

func2('A', 'A'); // OK
func2('A', 'B'); // OK, why?
func2('A', 'C'); // ERR

Но мне нужно, чтобы x и y были одинаковыми, как в примере с классами:

class A {  public a;}
class B {  public b;}
class C {  public c;}

function func1<T extends A | B>(x: T, y: T): void { }

func1(new A(), new A()); // OK
func1(new A(), new B()); // ERR
func1(new A(), new C()); // ERR

Есть ли способ, чтобы x и y имели одинаковое значение с "String Literal Type"?

1 Ответ

0 голосов
/ 17 апреля 2020

Комментарий Алуана Хаддада решает проблему:

Параметры оба соответствуют ограничению, и порядок не имеет значения, поэтому происходит соответствующий вывод, однако вы можете написать func2 (x: T, y : U). Это делает второе ограничение зависимым от первого

Теперь оба параметра могут иметь только одно и то же значение:

function func2<T extends 'A' | 'B', U extends T>(x: T, y: U): void { }

func2('A', 'A'); // OK
func2('A', 'B'); // ERR
func2('A', 'C'); // ERR
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...