Если вы действительно хотите использовать интерфейс, вы можете сделать это следующим образом:
interface Row<T> extends T[]
{
[cell: number]: T
}
interface Matrix<T> extends Row<T>[]
{
[cell: number]: Row<T>
}
(Возможно, вы хотели бы знать, что T[]
является синонимом Array<T>
.)
Но TypeScript использует структурное сопоставление, поэтому нет никакой разницы между type и interface , это просто разные синтаксисы для одной и той же вещи.Вот, например, почему мы не используем префикс I
перед именами интерфейсов.Код, который я написал выше, идентичен следующему:
type Row<T> = T[];
type Matrix<T> = Array<T[]>;
Если вы хотите добавить свои собственные методы к Matrix
, правильный способ ООП - создать для него класскоторый содержит вложенный массив как свойство:
type Row = number[];
class Matrix
{
elements: Array<Row>;
multiply(B: Matrix)
{
/* do something with elements */
}
}