Reputation:
In testing my UserRouter, I am using a json file
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"
]
},
{
...
}
]
Building my app, I get the following TS error
ERROR in ...../UserRouter.ts
(30,27): error TS7006: Parameter 'user' implicitly has an 'any' type.
UserRouter.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;
Upvotes: 474
Views: 993458
Reputation: 1635
go to "tsconfig.json" and add this: "noImplicitAny": false,
{
"compileOnSave": false,
"compilerOptions": {
"noImplicitAny": false,
........
Upvotes: 0
Reputation: 439
Or add the below on top of the code that has the error
// @ts-ignore: Object is possibly 'null'.
Upvotes: 1
Reputation: 1696
My case:
export default function ({user, path}) {
return (
//...
)
}
I changed to
export default function ({user, path} : {
user: string
path: string
}) {
return (
//...
)
}
Upvotes: 6
Reputation: 105
try to declare the type of user. Such as
let user:Object = {sample object}
Follow this methid. As
let var:type = val
Upvotes: 1
Reputation: 1022
Make these changes in your compilerOptions
section of tsconfig.json
file this worked for me
"noImplicitAny": false
no need to set
"strict":false
And please wait 1 or two minutes compilation is very slow some pcs
Upvotes: 56
Reputation: 227
I found this issue in Angular to arguments of function.
Before my code giving error
Parameter 'event' implicitly has an 'any' type
Here Is code
changeInpValue(event)
{
this.inp = event.target.value;
}
Here is the change, after the argument write : any
and the error is solved
changeInpValue(event : any)
{
this.inp = event.target.value;
}
Working fine for me.
Upvotes: 21
Reputation: 319
Parameter 'post' implicitly has an 'any' type in Angularcli Perhaps on project creation you've enabled Angular's strict mode in your app? Max recommends to disable strict mode If you've enabled strict mode, please disable it for this course by setting the strict property in tsconfig.json to false
Upvotes: 0
Reputation: 63
go to tsconfig.json and comment the line the //strict:true this worked for me
Upvotes: 3
Reputation: 12414
You are using the --noImplicitAny
and TypeScript doesn't know about the type of the Users
object. In this case, you need to explicitly define the user
type.
Change this line:
let user = Users.find(user => user.id === query);
to this:
let user = Users.find((user: any) => user.id === query);
// use "any" or some other interface to type this argument
Or define the type of your Users
object:
//...
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');
//...
Upvotes: 633
Reputation: 74500
export const users = require('../data'); // presumes @types/node are installed
const foundUser = users.find(user => user.id === 42);
// error: Parameter 'user' implicitly has an 'any' type.ts(7006)
--resolveJsonModule
--resolveJsonModule
compiler option:
import users from "./data.json" // `import` instead of `require`
const foundUser = users.find(user => user.id === 42); // user is strongly typed, no `any`!
There are some alternatives for other cases than static JSON import.
type User = { id: number; name: string /* and others */ }
const foundUser = users.find((user: User) => user.id === 42)
function isUserArray(maybeUserArr: any): maybeUserArr is Array<User> {
return Array.isArray(maybeUserArr) && maybeUserArr.every(isUser)
}
function isUser(user: any): user is User {
return "id" in user && "name" in user
}
if (isUserArray(users)) {
const foundUser = users.find((user) => user.id === 42)
}
You can even switch to assertion functions (TS 3.7+) to get rid of if
and throw an error instead.
function assertIsUserArray(maybeUserArr: any): asserts maybeUserArr is Array<User> {
if(!isUserArray(maybeUserArr)) throw Error("wrong json type")
}
assertIsUserArray(users)
const foundUser = users.find((user) => user.id === 42) // works
A runtime type check library like io-ts
or ts-runtime
can be integrated for more complex cases.
noImplicitAny: false
undermines many useful checks of the type system:
function add(s1, s2) { // s1,s2 implicitely get `any` type
return s1 * s2 // `any` type allows string multiplication and all sorts of types :(
}
add("foo", 42)
Also better provide an explicit User
type for user
. This will avoid propagating any
to inner layer types. Instead typing and validating is kept in the JSON processing code of the outer API layer.
Upvotes: 6
Reputation: 410
if you get an error as Parameter 'element' implicitly has an 'any' type.Vetur(7006) in vueJs
with the error:
exportColumns.forEach(element=> {
if (element.command !== undefined) {
let d = element.command.findIndex(x => x.name === "destroy");
you can fixed it by defining thoes variables as any as follow.
corrected code:
exportColumns.forEach((element: any) => {
if (element.command !== undefined) {
let d = element.command.findIndex((x: any) => x.name === "destroy");
Upvotes: 16
Reputation: 2561
In your tsconfig.json
file set the parameter "noImplicitAny": false
under compilerOptions
to get rid of this error.
Upvotes: 219
Reputation: 131
I encounted this error and found that it was because the "strict" parameter was set to true in the tsconfig.json file. Just set it "false" (obviously). In my case I had generated the tsconfig file from the cmd prompt and simply missed the "strict" parameter, which was located further down in the file.
Upvotes: 1