Функция смешивания Typescript, полученная из обобщенного типа подкласса - PullRequest
0 голосов
/ 27 сентября 2018

Ниже приведен пример проблемы, с которой я сталкиваюсь в данный момент.Я пытаюсь написать миксин, который правильно выводит и отражает универсальный тип из подкласса класса, предоставленного миксину.

abstract class A<T = {}> {
  public abstract init(): T;
}

interface IB {
  something: string;
}

class B extends A<IB> {
  public init(): IB {
    return null;
  }
}

type ConstructorOf<T = {}> = new (...args: any[]) => T;

function ApplyC<T extends ConstructorOf<A>>(base: T) {
  abstract class C extends base {

  }
  return C;
}

class D extends ApplyC(B) {
  constructor() {
    super();
    // this.init()
  }
}

Где я написал this.init(), intellisense говорит мне, что яперегрузка на init(), одна - init(): {}, а другая - init(): IB, проблема в том, что я не хочу, чтобы это выглядело как перегрузка, и я просто хочу, чтобы появилась IB.

Мне нужно, чтобы T in A<T = {}> был выведен каким-либо образом в миксине и передать его в ConstructorOf<A> из предоставленного base: T.

1 Ответ

0 голосов
/ 02 октября 2018

Вам действительно нужно ограничить функцию ApplyC, чтобы получать только подклассы A?Если нет, вы можете заменить A на any, например:

    function ApplyC<T extends ConstructorOf<any>>(base: T) {

, тогда D.init() вернет просто IB и ничего больше.

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