Я создал интерфейс и абстрактный класс в следующих строках:
interface ITest<A, B> {
testFunc: (input: A) => B;
}
abstract class AClass<A, B> {
abstract testFunc: (input: A) => B;
}
У меня есть несколько подклассов, которые расширяют AClass
, и несколько объектов, реализующих ITest
, с использованием различных типов для A
и B
. Например:
class SubClass1 extends AClass<number, string> {...}
class SubClass2 extends AClass<string[], boolean> {...}
Для абстрактного класса или интерфейса я предположил, что смогу объявить переменные, которые могут содержать эти типы без конкретных параметров универсального типа, поскольку я просто хочу, чтобы он был экземпляром AClass
без учета общих типов, в следующих строках:
let aClass: AClass; // Could hold SubClass1 or SubClass2
let iTests: ITest[];
Но я получаю сообщение об ошибке, в котором говорится, что моему универсальному типу требуются два параметра типа. Единственный способ обойти это - установить параметр типа по умолчанию и / или объявить эти переменные с any
в качестве аргумента общего типа (например, ITest<any, any>[]
)?
aClass
иiTests
, но не знаете, какие конкретные типы использовать? Просто чтобы гарантировать, что мы дадим наилучшие ответы, которые мы можем. - person T.J. Crowder   schedule 08.09.2019