У меня есть следующий код:
class Factory<K, T extends new (...p: any) => any> {
add(key: K, fn: (...p: ConstructorParameters<T>) => InstanceType<T>) {
}
}
class Foo {
constructor(a: number) {
}
}
class Boo {
constructor(a: number) {
}
}
new Factory<number, typeof Foo>().add(1, (a) => new Boo(a))
Я бы предположил, что это не должно быть скомпилировано, поскольку Boo
не является производным от Foo
. Но работает нормально.
Я что-то упускаю?
Foo
что-то, чего нет уBoo
, он перестанет компилироваться. - person Nadia Chibrikova   schedule 25.05.2021extends
как присваиваемый, поэтому ваш параметр универсального типа просто должен быть назначенtypeof Foo
, чтоBoo
(благодаря структурной типизации, как сказала @NadiaChibrikova). - person superhawk610   schedule 26.05.2021