Reputation: 3642
Is it possible to create an Interface in TypeScript with optional function?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
Upvotes: 183
Views: 95163
Reputation: 9971
Just like field properties, we can also declare optional methods in an interface, just by placing "?" after the method name
interface Vehicle{
run?(): void;
}
class Sedan implements Vehicle {}
class SUV implements Vehicle {
run() {
console.log("run run");
}
}
let suv = new SUV();
suv.run();
Upvotes: 6
Reputation: 93631
There are currently three syntaxes that TypeScript allows for function declarations in interfaces:
Using your example of a validation
function taking 1 parameter (of any
type) and a boolean
return value:
validation: {(flag: any): boolean};
or in the newer syntax:
validation(flag: any) : boolean;
or an alternative is:
validation: (flag: any) => boolean;
Solution:
so to make it optional with the old syntax is easy:
validation?: {(flag: any): boolean};
with the second syntax (recent addition - thanks to @toothbrush
)
validation?(flag: any) : boolean;
or in the third syntax (as you found):
validation?: (flag: any) => boolean;
Upvotes: 324