typescript - Hvordan erklære en funksjon som kun aksepterer to eller null argumenter?
I TypeScript, hvis jeg erklærer en funksjon slik
function foo(arg1?: any, arg2?: any)
Da vil ikke kompilatoren klage hvis jeg kaller funksjonen med
- Null argumenter
- Et argument
- To argumenter
Hvordan bør jeg erklære funksjonen hvis jeg vil at kompilatoren skal klage på ett argument, men ikke to eller null?
Svar #1
Du kan bruke funksjonsoverbelastning: https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads
// Start with most specific overload signature
function foo(arg1: any, arg2: any): any;
// And then, less specific overload signature
function foo(): any;
// At the end, write your function implementation
function foo(arg1?: any, arg2?: any) {
console.log(arguments);
}
foo(1, 'test'); // Ok
foo(); // Ok
foo('a'); // Compile error
Svar #2
Hva jeg liker å gjøre i denne typen situasjoner:
interface FooArgs {
arg1: any;
arg2: any;
}
function foo(arg?: FooArgs)
{
// do stuff
}
Kalt slik: foo({arg1: 'arg', arg2: 'arg2}) eller foo().
Typescript-kompilatoren vil vise en feil hvis du prøver det på denne måten:
foo({arg1: 'arg'})
Argument of type '{ arg1: number; }' is not assignable to parameter of type 'FooArgs'. Property 'arg2' is missing in type '{ arg1: number; }' but required in type 'FooArgs'.
Prøv det her
