Можно ли создать интерфейс на TypeScript с дополнительной функцией?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
Можно ли создать интерфейс на TypeScript с дополнительной функцией?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
Ответы:
В настоящее время существует три синтаксиса, которые 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;
any- это не тип, а имя параметра, который неявно имеет тип any. Параметры должны быть названы даже на интерфейсах. Этот код не будет скомпилирован, если включен --noImplicitAny. Должно получиться примерно так: validation?:(whatever:any) => boolean;где whateverкакое-то разумное имя параметра.
if (object.validation):) Это необходимо для контекста объекта, поэтому if (this.validation)также может быть подходящим в зависимости от ваших обстоятельств.