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.
}
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.
}
Odpowiedzi:
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;
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.
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.