Додаткова функція TypeScript в інтерфейсі


98

Чи можна створити інтерфейс у TypeScript з додатковою функцією?

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

}

2
Я знайшов відповідь, я думаю, що можна реалізувати необов'язкову функцію, таку як: перевірка ?: (будь-яка) => логічна;
Антон Селін,

Відповіді:


193

На даний момент існує три синтаксиси, які 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 Привіт! Як я знаю, визначена функція чи ні?
Ілан Олкіс,

1
@IlanOlkies: Те саме, як ви тестуєте на що-небудь у JavaScript if (object.validation):) Він повинен відповідати контексту об'єкта, тому if (this.validation)також може бути доречним залежно від вашої обставини.
Gone Coding
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.