Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Problema ao tipar o objeto da minha API - TypeScript

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeEstou criando uma API simples intencionalmente tudo em um mesmo arquivo "app.ts" e minha dificuldade está em tentar enviar esta nova requisição (post) para criar um item, no entanto, eu quero que no atributo "nome" ele só aceite string e no atributo "preco" ele só aceite number, mas mesmo eu criando essa interface e tipando o meu objeto novoItem com o mesmo, quando eu abro o Insomnia e envio um number pra nome e uma string para o preco ele aceita e cria o item sem problemas, mas eu não queria que ele permitisse neste caso, como eu faço isso de forma mais simples sem precisar ficar criando uma série de verificações ifs (pensando em mais atributos que estarei colocando futuramente) e sem a necessidade de instalar uma biblioteca de terceiros pra cuidar disso?

Link deste meu projeto no meu gitHub: https://github.com/Phelipe7982/API-Teste---TypeScript

1 resposta
solução!

Oi Phelipe,

O problema que você está enfrentando ocorre porque a tipagem do TypeScript é utilizada apenas em tempo de desenvolvimento, ou seja, o código JavaScript gerado não possui essas verificações de tipo em tempo de execução. 🤔

Para resolver isso, você precisa realizar a validação dos dados recebidos no corpo da requisição ( req.body ) antes de criar o novo item. Uma forma simples de fazer isso é verificar o tipo de cada campo usando o operador typeof.

Veja um exemplo prático de como você pode adaptar seu código:

app.post("/items", (req: Request, res: Response) => {
    const { nome, preco } = req.body;

    if (!nome || !preco) {
        return res.status(400).json({ error: "Os campos nome e preço são obrigatórios." });
    }

    if (typeof nome !== 'string' || typeof preco !== 'number') {
        return res.status(400).json({ error: "O campo nome deve ser string e o campo preco deve ser number." });
    }

    const novoItem: InterfaceItem = {
        id: id++,
        nome,
        preco
    };

    items.push(novoItem);
    return res.status(200).json({ message: "Item adicionado!" });
});

Neste exemplo, primeiro verificamos se os campos nome e preco existem. Em seguida, verificamos se o tipo de nome é string e o tipo de preco é number. Se alguma dessas verificações falhar, retornamos um erro 400. Caso contrário, criamos o novo item e o adicionamos à lista. 👍

Continue praticando e explorando novas soluções! 💪

tux matrix Caso este post o tenha ajudado, marque-o como solucionado ☑️. Bons Estudos! 🤓