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

Relaterte artikler