Тип Generi c метода зависит от типа Generi c класса в TypeScript - PullRequest
1 голос
/ 26 апреля 2020

У меня есть сценарий использования, который можно выразить в псевдокоде следующим образом:

class Gen<T> {
  public doStuff<U>(input: U 
         /* If T is an instance of number, 
          then input type U should be an instance of custom type ABC, or
          If T is an instance of string,
          then input type U should an instance of custom type XYZ, else
          compile error */) {

     // do stuff with input
  }
}

Можно ли это выразить в TypeScript?

1 Ответ

1 голос
/ 26 апреля 2020

Безусловно, с выводом это легко выполнимо. TypeScript позволяет вам «возвращать» другой тип на основе общей проверки типа ввода c. Вы должны просто использовать InferInputType<T> тип, подобный этому:

type InferInputType<T> =
    T extends number ? ABC :
    T extends string ? XYZ :
    never;

, тогда вы можете переписать свой Gen как:

class Gen<T> {
    public doStuff(input: InferInputType<T>) {}
}

Тогда вы можете использовать свой класс следующим образом:

const genNumber = new Gen<number>();
genNumber.doStuff({ value: 10 });
genNumber.doStuff({ value: 'abc' }); // Error

Вы можете увидеть рабочий пример на детской площадке: Playground Link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...