打字稿:TS7006:参数“xxx"隐式具有“任何"类型 [英] Typescript: TS7006: Parameter 'xxx' implicitly has an 'any' type

查看:37
本文介绍了打字稿:TS7006:参数“xxx"隐式具有“任何"类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在测试我的 UserRouter 时,我使用了一个 json 文件

data.json

<预><代码>[{身份证":1,"name": "卢克·凯奇",别名":[卡尔·卢卡斯"、强力人"、防弹先生"、雇佣英雄"]、"职业": "酒保","性别": "男",高度": {英尺":6,在":3},头发":秃头",棕色的眼睛",权力":[力量",耐用性",康复"]},{...}]

构建我的应用程序时,我收到以下 TS 错误

错误在...../UserRouter.ts(30,27): 错误 TS7006: 参数 'user' 隐式具有 'any' 类型.

UserRouter.ts

import {Router, Request, Response, NextFunction} from 'express';const Users = require('../data');导出类 UserRouter {路由器:路由器;构造函数(){...}/*** 通过 id 获取一个用户*/public getOne(req: Request, res: Response, _next: NextFunction) {让查询 = parseInt(req.params.id);/*[30]->*/let user = Users.find(user => user.id === query);如果(用户){资源状态(200).发送({消息:'成功',状态:res.status,用户});}别的 {资源状态(404).发送({message: '没有找到具有指定 ID 的用户.',状态:res.status});}}}const userRouter = new UserRouter().router;导出默认用户路由器;

解决方案

您正在使用 --noImplicitAny 而 TypeScript 不知道 Users 的类型目的.在这种情况下,您需要明确定义 user 类型.

更改这一行:

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

为此:

let user = Users.find((user: any) => user.id === query);//使用任何"或其他一些接口来输入这个参数

或者定义你的 Users 对象的类型:

//...界面用户{身份证号码;名称:字符串;别名:字符串[];职业:字符串;性别:字符串;高度:{英尺:数字;在:数字;}头发:绳子;眼睛:绳子;权力:字符串[]}//...const Users = <User[]>require('../data');//...

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;

解决方案

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');
//...

这篇关于打字稿:TS7006:参数“xxx"隐式具有“任何"类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆