TypeScript her iki parametreyi veya hiç birini gerektirir
Her iki koşullu parametrenin de verilmesini veya hiçbirinin verilmemesini gerektiren bir fonksiyon tanımlamanın bir yolu var mı? Örneğin:
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
Sadece nesne ayrıştırmayı kullanabileceğimi, iki yöntem oluşturabileceğimi veya daha fazla if deyimi ekleyebileceğimi fark ediyorum, ama bunun mümkün olup olmadığını merak ediyorum. Teşekkürler!
Cevap #1
Fonksiyonun türü için aşırı yüklemeyi kullanabilirsiniz:
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
Oyun alanı linki
Yine de, biraz tekrarlayıcı ve bir dereceye kadar çirkin. Yapılabilir olsa da, mümkün olduğunda ayrı fonksiyonlar kullanmayı tercih ederim.
Ayrı parametreler yerine bir nesne kullanarak benzer bir yaklaşım:
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
