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