Пример:
interface IClass {
test(arg: String): Promise<*>
}
class MyClass implements IClass {
async test(arg) { await dosomething(arg) }
}
async function useIt(TheClass: IClass) {
const obj = new TheClass()
obj.test('arg')
}
Однако это приводит к:
const obj = new TheClass()
^^^^^^^^^^^^ constructor call. Constructor cannot be called on
const obj = new TheClass()
^^^^^^^^ IClass
Который, я понимаю, поскольку IClass - это интерфейс, но как можно было бы указать "класс", который реализует определенный "интерфейс" в качестве параметра функции?
Вам не хватает оболочка Class<.>
типа аргумента (useIt(TheClass: IClass)
следует использоватьIt useIt(TheClass: Class<IClass>)
). Это, и интерфейсы не предполагают конструктор по умолчанию, поэтому вам понадобится явный текст на IClass (с возвратом типа void
).
$Subtype<...>
)), потому что поток обнаруживает несоответствиеstring
<->String
.Class
в какой-то момент, но общий аргумент был ключевым.