TypeScript Необязательная функция в интерфейсе

99

Можно ли создать интерфейс на TypeScript с дополнительной функцией?

interface IElement {
  name: string;
  options: any;
  type: string;
  value?: string;
  validation(any): boolean; // --> should be optional.

}
Антон Селин
источник
2
Я нашел ответ, думаю, можно реализовать такую ​​необязательную функцию: проверка ?: (any) => boolean;
Антон Селин

Ответы:

194

В настоящее время существует три синтаксиса, которые TypeScript допускает для объявления функций в интерфейсах:

Используя ваш пример validationфункции, принимающей 1 параметр ( anyтипа) и booleanвозвращаемое значение:

validation: {(flag: any): boolean};

или в новом синтаксисе:

validation(flag: any) : boolean;

или альтернатива:

validation: (flag: any) => boolean;

Решение:

так что сделать его необязательным со старым синтаксисом легко:

validation?: {(flag: any): boolean};

со вторым синтаксисом (недавнее добавление - спасибо @toothbrush)

validation?(flag: any) : boolean;

или в третьем синтаксисе (как вы нашли):

validation?: (flag: any) => boolean;
Исчезло кодирование
источник
3
То, как вы это написали, any- это не тип, а имя параметра, который неявно имеет тип any. Параметры должны быть названы даже на интерфейсах. Этот код не будет скомпилирован, если включен --noImplicitAny. Должно получиться примерно так: validation?:(whatever:any) => boolean;где whateverкакое-то разумное имя параметра.
NYCdotNet
@NYCdotNet: Да, мне не следовало брать оригинал как прочитанный . Исправлено :)
Gone Coding
@ Go-coding Привет! Как узнать, определена функция или нет?
Илан Олкис
1
@IlanOlkies: Точно так же, как вы проверяете что-либо в JavaScript if (object.validation):) Это необходимо для контекста объекта, поэтому if (this.validation)также может быть подходящим в зависимости от ваших обстоятельств.
Gone Coding