Как определить функцию, которая принимает класс, который реализует интерфейс в потоке?

1

Пример:

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 - это интерфейс, но как можно было бы указать "класс", который реализует определенный "интерфейс" в качестве параметра функции?

Теги:
flowtype

1 ответ

2
Лучший ответ

Вам не хватает оболочка Class<.> типа аргумента (useIt(TheClass: IClass) следует использоватьIt useIt(TheClass: Class<IClass>)). Это, и интерфейсы не предполагают конструктор по умолчанию, поэтому вам понадобится явный текст на IClass (с возвратом типа void).

  • 0
    Подтвердил, что это работает . Конечно, лучше, чем то, что я предложил в комментарии (теперь удалено (это был $Subtype<...> )), потому что поток обнаруживает несоответствие string <-> String .
  • 0
    Спасибо! Именно то, что я искал! Я попробовал Class в какой-то момент, но общий аргумент был ключевым.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню