TypeScript zahtijeva oba parametra ili nijedan
Postoji li način da se definira funkcija koja zahtijeva da se ili oba uvjetna parametra daju, ili nijedan? Na primjer:
function greet(firstName?: string, lastName?: string) {
if (fistName && lastName) console.log(`Hello, ${firstName} ${lastName}!`)
else console.log('Hello, World!')
}
greet('John', 'Doe') // Hello, John Doe!
greet() // Hello, World!
greet('John') // Invalid
Shvaćam da bih mogao jednostavno koristiti destrukturiranje objekta, stvoriti dvije metode ili dodati više if izjava, ali sam znatiželjan vidjeti je li ovo moguće. Hvala!
Odgovor #1
Možete koristiti preopterećenje za tip funkcije:
type Greet = {
(firstName: string, lastName: string): void;
(): void;
};
const greet: Greet = (firstName?: string, lastName?: string) => {
if (firstName && lastName) console.log(`Hello, ${firstName} ${lastName}!`)
else console.log('Hello, World!')
};
greet('John', 'Doe'); // Hello, John Doe!
greet(); // Hello, World!
greet('John'); // Invalid
Veza za igralište
Ipak, malo je repetitivno i prilično ružno. Iako izvedivo, radije bih koristio odvojene funkcije kad god je to moguće.
Sličan pristup, koristeći objekt umjesto odvojenih parametara:
type GreetParam = {
firstName: string;
lastName: string;
};
const greet = (param?: GreetParam) => {
if (param) console.log(`Hello, ${param.firstName} ${param.lastName}!`)
else console.log('Hello, World!')
};
greet({ firstName: 'John', lastName: 'Doe' }); // Hello, John Doe!
greet(); // Hello, World!
greet({ firstName: 'John' }); // Invalid
greet({}); // Invalid
