Получить реализацию метода интерфейса из конструктора класса реализации - PullRequest
0 голосов
/ 16 марта 2020

Я хочу реализовать следующее поведение: функция, которая получает строку и другую функцию в качестве аргумента и возвращает строку:

interface Foo {
  ConditionalColor(color: string, condition: (arg: any) => boolean): string;
}

Теперь я пытаюсь передать метод ConditionalColor в реализующий класс, используя его конструктор:

class FooImpl implements Foo {
  ConditionalIconColor(color: string, condition: (arg: any) => boolean): string;

  constructor(
    ConditionalColor: (color:string, condition: (arg: any) => boolean) => string
  ) {
    this.ConditionalIconColor = ConditionalColor
  }

Я получаю сообщение об ошибке: Function implementation is missing or not immediately following the declaration.

Я не знаю, является ли это просто проблемой с синтаксисом или если это невозможно сделать так, как нужно Я пытаюсь сделать это. Может быть, у вас есть идеи, чтобы помочь мне здесь.

Спасибо!

1 Ответ

1 голос
/ 16 марта 2020

Поскольку у вас нет реализации времени разработки, вы должны объявить функцию как свойство.

Кроме того, в именах функций есть опечатка. Я использовал имя функции "ConditionalColor".

interface IFoo {
  ConditionalColor(color: string, condition: (arg: any) => boolean): string;
}

class Foo implements IFoo {
  constructor(
    ConditionalColor: (color:string, condition: (arg: any) => boolean) => string
  ) {
    this.ConditionalColor = ConditionalColor;
  }

  ConditionalColor: (color: string, condition: (arg: any) => boolean) => string;
}

Обратите внимание на разницу между вашей версией (первой) и моей (второй)

ConditionalColor(color: string, condition: (arg: any) => boolean): string;
ConditionalColor: (color: string, condition: (arg: any) => boolean) => string;

Ваша пытается объявить функция без тела. Мой объект объявляет свойство, тип которого принимает аргументы и возвращает значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...