TypeScript: Partial

Opublikowano: 23.02.2023 - tagi: TypeScript JavaScript Typ

Do czego służy Partial?

Spójrz na poniższy kod:

interface Product {
	name: string;
	price: number;
	description: string;
	weight: number;
}

Mamy tutaj typ Product wszystkie jego pola są wymagane. Więc jeśli spróbujesz stworzyć obiekt o typie Product nie definiując wartości dla wszystkich wymaganych pól TypeScript zgłosi błąd.

Kolejny kod:

const buildProduct = (): Product => {
	return {
		name: randomName(),
		price: randomPrice().
		description: randomDescription(),
		weight: randomWeight()
	}
}

Powyższa funkcja tworzy obiekt typu Product. Przydatny builder, kiedy na przykład piszesz testy. Problem z tym kodem jest taki, gdy potrzebujesz przekazać wartości do konkretnych pól. Oczywiście możesz stworzyć obiekt i przypisać potrzebne wartości.

Można też tak:

const product: Product = buildProduct({ name: 'Super product', price: 150 });

Jak to zrobić?

const buildProduct = (product: Product): Product

Taki zapis oczywiście nie zadziała. W takich sytuacjach sprawdzi się Partial:

const buildProduct = (product: Partial<Product>): Product => {
	return {
		name: randomName(),
		price: randomPrice().
		description: randomDescription(),
		weight: randomWeight(),
		...product
	}
}

Teraz zapis:

const product: Product = buildProduct({ name: 'Super product', price: 150 });

Zadziała.

Partial jak widać pozwala na powiedzenie TypeScript: wartości danego typu są opcjonalne.