1
resposta

[Bug] Estou com problema no arquivo app.ts na aula:Evitando erros com TypeScript rigoroso

fez todos comandos certos mas aparece esse erro:
[{
"resource": "/c:/Users/SONY VAIO/Desktop/typescript-para-backend-configuracao-inicial/src/app.ts",
"owner": "typescript",
"code": "2345",
"severity": 8,
"message": "Argument of type 'string' is not assignable to parameter of type 'number'.",
"source": "ts",
"startLineNumber": 27,
"startColumn": 24,
"endLineNumber": 27,
"endColumn": 32
}]
e outro:[{
"resource": "/c:/Users/SONY VAIO/Desktop/typescript-para-backend-configuracao-inicial/src/app.ts",
"owner": "typescript",
"code": "2345",
"severity": 8,
"message": "Argument of type 'string' is not assignable to parameter of type 'number'.",
"source": "ts",
"startLineNumber": 28,
"startColumn": 24,
"endLineNumber": 28,
"endColumn": 32
}]
olha a imagem:![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

import express, { Response } from "express";

const app = express();
app.use(express.json());

app.get("/", (_, res:Response) => {
  res.send("Bem vindo ao curso de TypeScript!");
});

function criaPet(id:number, nome:string, especie:string, idade:number, adotado:boolean) {
  return {
    id,
    nome,
    especie,
    idade,
    adotado,
  };
}

let id = "0";
function geraId() {
  id = id + 1;
  return id;
}

app.post("/pets", (_, res) => {
  const pet1 = criaPet(geraId(), "Bolt", "cachorro", 3, false);
  const pet2 = criaPet(geraId(), "Mel", "gato", 2, false);

  res.send([pet1, pet2]);
});

export default app;

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Olá, estudante, como vai?

O erro que o TypeScript está mostrando significa que a função criaPet está esperando receber um number no primeiro parâmetro (id:number), mas você está passando uma string. Isso acontece por causa da forma como o id foi declarado e usado na função geraId.

Hoje seu código está assim:

function criaPet(id:number, nome:string, especie:string, idade:number, adotado:boolean) {
  return {
    id,
    nome,
    especie,
    idade,
    adotado,
  };
}

let id = "0";
function geraId() {
  id = id + 1;
  return id;
}

app.post("/pets", (_, res) => {
  const pet1 = criaPet(geraId(), "Bolt", "cachorro", 3, false);
  const pet2 = criaPet(geraId(), "Mel", "gato", 2, false);

  res.send([pet1, pet2]);
});

Repare que:

  • criaPet quer um id:number.
  • let id = "0"; define id como string.
  • geraId() retorna esse id, então o retorno da função é inferido como string.
  • Quando você faz criaPet(geraId(), ...), o TS vê uma string sendo enviada para um parâmetro number e gera o erro Argument of type 'string' is not assignable to parameter of type 'number'.

Um jeito simples de corrigir é trabalhar com id como número desde o início. Por exemplo:

let id = 0;   // Removendo as aspas do 0

function geraId() {
  id = id + 1;
  return id;
}

Nesse exemplo, id começa como 0 (number) e geraId soma 1 e retorna um number.

Espero ter ajudado.

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado