Как назначить классы свойствам типа "new () =>" - PullRequest
0 голосов
/ 31 мая 2018

Существует иерархия

class Thing { }

class BarView<Type> extends React.Component<{ obj: Type }, {}> { }

class FlossView extends BarView<Thing> {  }

class Foo<Type> {
    renderer?: new () => BarView<Type>

    constructor(view?: new () => BarView<Type>) {
         this.renderer = view
    }
}

Почему я могу вызвать конструктор Foo с подписью имени класса и не иметь ошибок, подобных этой

let foo = new Foo<Thing>(FlossView)

... whileследующий код выдает ошибку?

let foo = new Foo<Thing>()
foo.renderer = FlossView
/* [ts]
Type 'typeof FlossView' is not assignable to type 'BarView<Thing> | undefined'.
Type 'typeof FlossView' is not assignable to type 'BarView<Thing>'.*/

Как получить не typeof FlossView версию класса, а просто FlossView?

1 Ответ

0 голосов
/ 31 мая 2018

Дело закрыто.Подпись недействительна, самый базовый класс React.Component никогда не имел конструктора типа new () => React.Component.

. Рисунки, есть только конструктор с одним параметром, props.И поэтому объявление типа свойства renderer недопустимо.Это должно быть

renderer?: new (props) => BarView<Type>
...