alex4answ
@alex4answ

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

Интерфейсы служат гарантией того, что класс реализует все прописанные в нем методы, свойства.
Выходит интерфейсы удобно и нужно использовать как тип параметра в функциях/методах.

Но я запутался, у меня this класса реализующий интерфейс не может быть назначен интерфейсу, вот пример:
typescript
interface INode {
  value: any;

  left: INode | null;
  right: INode | null;
  parent: INode | null;

  setRight(node: INode): void;
  setLeft(node: INode): void;
  setParent(node: INode): void;
}

class TreeNode implements INode {
  left: this | null = null;
  right: this | null = null;
  parent: this | null = null;

  constructor(public value: any) {}

  setLeft(node: this | null): void { // ERROR
    this.left = node;
  }

  setRight(node: this | null): void { // ERROR
    this.right = node;
  }

  setParent(node: this | null): void { // ERROR
    this.parent = node;
  }
}

Error: Property 'setLeft' in type 'TreeNode' is not assignable to the same property in base type 'INode'
и тп

Почему?
ведь TreeNode реализует интерфейс INode, я все еще не могу понять
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Потому что в интерфейсе у вас параметр node обязательно типа INode, а в классе он может быть null.

исправьте так
setRight(node: INode | null): void;
  setLeft(node: INode | null): void;
  setParent(node: INode | null): void;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы