No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Partial y Required Type

18/22
Recursos

Aportes 8

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Partial & Required en TS

Estos dos tipos de datos nos sirven para declarar que todos los campos de una interfaz son opcionales u obligatorios.

interface Product {
    title: string;
    price: number;
    category: string;
    size?: string;
}

type UpdateProduct = Partial<Product>
type StrictProduct = Required<Product>

De esa forma en UpdateProduct, todos los valores de Product van a ser opcionales y a la inversa en el caso de StrictProduct

Les comparto mis apuntes. 馃槃

Partial

Nos permite colocar todos los par谩metros de una interface como opcionales, sin necesidad que colocar ? par谩metro por par谩metro.

Sintaxis

interface InterfaceName extends Partial<Interface> {
		statements
}

type TypeName = Partial<TypeOrInterface>;

Required

Nos permite colocar todos los par谩metros de una interface como obligatorios.

Sintaxis

interface InterfaceName extends Required<Interface> {
		statements
}

type TypeName = Required<TypeOrInterface>;

Reutilizaci贸n de DTOs

Podemos reutilizar nuestro DTO normalmente, ya que son interfaces.

Ejemplo

import { Product } from "./product.model";

export interface CreateProductDto extends Omit<Product, 'id' | 'createdAt' | 'updatedAt' | 'category'> {
    categoryId: string;
}

export interface UpdateProductDto extends Partial<CreateProductDto> {

}

Tener en cuenta que cuando utilizamos CreateProductDTO tenemos omitidos el atributo updateAt que ser谩 necesario para el m茅todo de actualizar producto, en tonces al hacer lo siguiente:

export interface UpdateProductDTO extends Partial<CreateProductDTO> {}

estamos heredando la omisi贸n de updateAt y para recuperar esto podemos hacer una extenci贸n de m煤ltiple de lo que ten铆amos anteriormente m谩s el atributo updateAt que ser谩 necesario cuando actualicemos nuestro producto:

export interface UpdateProductDTO extends Partial<CreateProductDTO>, Pick<Product, 'updateAt'> {}

Nos sirven para declarar que los datos que provienen de ese tipo o interfaz son opcionales, usualmente lo usamos al momento de modificar datos.

Imagina que tienes un producto, este producto al momento de ser creado obtuvo ciertos datos, pero ahora necesitas modificarlo, sin embargo no necesitas todos los datos para modificarlo ya que solo modificaras o cambiaras ciertos datos.

Entonces all铆 entra Partials

interface Product {
	id: number,
	name: string,
	color: string,
	description: string,
	model: string,
	country: string,
}

interface EditProduct extends Product Partial<Product>

Required

A diferencia de Partials que pone todos los datos como opcionales, tenemos tambi茅n required que hace lo contrario, pone todos los datos como obligatorios.

Aprender todo esto de utility types me recuerda mucho a teor铆a de conjuntos, donde cada interface seria un conjunto y sus operaciones como intersecciones o uniones los utility types

Ya terminando la clase me perdi jejej
se confundio en el minuto 10

Lo que comentaba el profe sobre prevData y changes es muy importante en la vida real para no tener perdida de informaci贸n y no tener que restaurar un respaldo de la base de datos. Si algo as铆 te pasa y no tienes un respaldo鈥 estas en problemas.
Aqu铆 un peque帽o ejemplo de lo que menciona el profe con una API con Express:

router.put('/:ID', verify, async function (req, res) {
    try {
        const { ID } = req.params
        const clientesJSON = { ...req.body, ID }

        const item = await service.updateClientes(clientesJSON)
        res.json({
            message: 'Test api updated',
            item,
        })
    } catch (error) {
        res.status(404).json({ message: error.message })
    }
})

Podemos hacer que los campos sean opcionales con Partial

export interface UpdateProductDto extends Partial<CreateProductDto> {}

Y podemos hacer que sean obligatorios con Required

type example2 = Required<Product>