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;
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');
//...
Dans votre fichier tsconfig.json
, définissez le paramètre "noImplicitAny": false
sous compilerOptions
pour supprimer cette erreur.
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.