Typescript - как реализовать циклический универсальный - PullRequest
1 голос
/ 14 апреля 2020

У меня есть следующий код:

interface BaseProps<TControl> {
  onEvent: (control: TControl) => void;
}

class BaseControl<TValue, BaseProps<any>> {
  onBlur = () => {
    onEvent(this); //subscriber must see the whole TS-class instead of BaseControl<TValue, BaseProps<any>>
  }
}

Как видите, я не могу определить вид класса

class BaseControl<TValue, BaseProps<this>>> {}

или бесконечный

class BaseControl<TValue, BaseProps<BaseControl<TValue, BaseProps<...etc.>>>> {}

Есть ли способ реализовать подобный указатель c вроде? BaseProps<this>

1 Ответ

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

In

class Foo<T> { }

T является переменной типа . Это не может быть сам тип. Это означает, что вы можете иметь вышеуказанное, но у вас не может быть этого

interface Foo<T> { } // ok
class Bar<any> { } // error: type variable cannot be 'any'
class Baz<Foo<any> { } // error: type variable cannot be 'Foo<any>'

, что вы пытаетесь сделать.

Однако вы можете сослаться на тип this внутри самого класса

class Foo<T> {
    foo: Foo<T>;
    constructor(foo: Foo<T>) {
        this.foo = foo;
    }
}

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

...