web-dev-qa-db-fra.com

Typescript: TS7006: Le paramètre 'xxx' a implicitement un type 'quelconque'

En testant mon UserRouter, j'utilise un fichier json

data.json

[
  {
    "id": 1,
    "name": "Luke Cage",
    "aliases": ["Carl Lucas", "Power Man", "Mr. Bulletproof", "Hero for Hire"],
    "occupation": "bartender",
    "gender": "male",
    "height": {
      "ft": 6,
      "in": 3
    },
    "hair": "bald",
    "eyes": "brown",
    "powers": [
      "strength",
      "durability",
      "healing"
    ]
  },
  {
  ...
  }
]

En construisant mon application, j'obtiens l'erreur TS suivante

ERROR in ...../UserRouter.ts
(30,27): error TS7006: Parameter 'user' implicitly has an 'any' type.

serRouter.ts

import {Router, Request, Response, NextFunction} from 'express';
const Users = require('../data');

export class UserRouter {
  router: Router;

  constructor() {
  ...
  }

  /**
   * GET one User by id
   */
  public getOne(req: Request, res: Response, _next: NextFunction) {
    let query = parseInt(req.params.id);
 /*[30]->*/let user = Users.find(user => user.id === query);
    if (user) {
      res.status(200)
        .send({
          message: 'Success',
          status: res.status,
          user
        });
    }
    else {
      res.status(404)
        .send({
          message: 'No User found with the given id.',
          status: res.status
        });
    }
  }


}

const userRouter = new UserRouter().router;
export default userRouter;
73
user762579

Vous utilisez le --noImplicitAny et TypeScript ne connaît pas le type d'objet Users. Dans ce cas, vous devez définir explicitement le type user.

changer cette ligne:

let user = Users.find(user => user.id === query);

pour ça:

let user = Users.find((user: any) => user.id === query); 
// use "any" or someother interface to type this argument

Ou définissez le type de votre objet Users:

//...
interface User {
    id: number;
    name: string;
    aliases: string[];
    occupation: string;
    gender: string;
    height: {ft: number; in: number;}
    hair: string;
    eyes: string;
    powers: string[]
}
//...
const Users = <User[]>require('../data');
//...
119
Diullei

Dans votre fichier tsconfig.json, définissez le paramètre "noImplicitAny": false sous compilerOptions pour supprimer cette erreur.

29
st_ahmed

J'ai rencontré cette erreur et découvert que c'était parce que le paramètre "strict" avait la valeur true dans le fichier tsconfig.json. Il suffit de le définir "faux" (évidemment). Dans mon cas, j'avais généré le fichier tsconfig à partir de l'invite cmd et manquais simplement le paramètre "strict", situé plus bas dans le fichier.

6
Jeff Eastman