Чи можна створити інтерфейс у 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)також може бути доречним залежно від вашої обставини.