TypeScript flera anropssignaturer för exporterad funktion
Jag har följande kod:
module array {
export function contains(arr: Array, item: any): bool { // implementation }
}
Det jag vill kunna ha är antingen unionstyp (i exemplet ovan bör Array, NodeList och IArguments vara möjliga) eller flera signaturer för den exporterade funktionen. Jag verkar inte kunna göra någon av dem.
Jag försökte deklarera funktionen flera gånger med olika typer av argumenten, men kompilatorn klagar på bristen på returvärde - det finns ingen poäng med att ge en implementation för en deklaration som bara används för typkontroll av argumenten (och gör koden omständlig). Jag tycker att en mycket bättre lösning skulle vara att ha unionstyper, eller hur?
Så frågan är: hur uppnår jag typkontroll för funktioner där det tillåtna argumentet är av olika typ (i det här fallet - ett array-liknande objekt), men implementeringen är densamma, utan att behöva kopiera/klistra in implementeringen (i princip skulle en enkel 'return false' förmodligen fungera i deklarationerna före den sista, men det verkar fortfarande vara en dålig idé).
Svar #1
Du kan använda any-nyckelordet för att ha en dynamisk parameter:
export function contains(arr: any[], item: any): bool { // implementation }
Eller om du vet vilka typer du vill tillåta, kan du överbelasta funktionen:
export function contains(arr: string[], item: string): bool;
export function contains(arr: number[], item: number): bool;
export function contains(arr: any[], item: any): bool { // implementation }
Jag har använt string och number som ett exempel - men du kan använda vilka typer du vill. Jag antog också att om du har en lista med strängar skulle du leta efter ett strängelement, men du kan ändra detta om det inte är fallet.
Den slutliga funktionen kan inte anropas - du kan endast komma åt den via överlagringarna.
