TypeScript Opcjonalna funkcja w interfejsie


105

Czy można utworzyć interfejs w języku TypeScript z opcjonalną funkcją?

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

}

2
Znalazłem odpowiedź, myślę, że jest możliwe zaimplementowanie opcjonalnej funkcji takiej jak ta: walidacja ?: (any) => boolean;
Anton Selin,

Odpowiedzi:


205

Obecnie istnieją trzy składnie, które TypeScript pozwala na deklaracje funkcji w interfejsach:

Na przykładzie validationfunkcji pobierającej 1 parametr ( anytypu) i booleanzwracaną wartość:

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

lub w nowszej składni:

validation(flag: any) : boolean;

lub alternatywą jest:

validation: (flag: any) => boolean;

Rozwiązanie:

więc uczynienie go opcjonalnym w starej składni jest łatwe:

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

z drugą składnią (ostatnie dodanie - dzięki @toothbrush)

validation?(flag: any) : boolean;

lub w trzeciej składni (jak znalazłeś):

validation?: (flag: any) => boolean;

3
Sposób, w jaki to napisałeś, anynie jest typem, ale jest nazwą parametru, który jest niejawnie typu any. Parametry muszą być nazwane, nawet w interfejsach. Skompilowanie tego kodu nie powiedzie się, jeśli jest włączona opcja --noImplicitAny. Powinno wyglądać mniej więcej tak: validation?:(whatever:any) => boolean;gdzie whateverjest jakaś rozsądna nazwa parametru.
NYCdotNet

@NYCdotNet: Tak, nie powinienem odbierać oryginału jako przeczytanego . Poprawione :)
Gone Coding

@ gone-coding Cześć! Skąd mam wiedzieć, czy funkcja jest zdefiniowana, czy nie?
Ilan Olkies

1
@IlanOlkies: Tak samo jak w przypadku czegokolwiek w JavaScript if (object.validation):) Musi być dopasowany do kontekstu obiektu, więc if (this.validation)może być również odpowiedni w zależności od okoliczności.
Gone Coding,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.