打字稿:TS7006:参数“xxx”隐式具有“任何”类型

新手上路,请多包涵

在测试我的 UserRouter 时,我使用的是 json 文件

数据.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"
    ]
  },
  {
  ...
  }
]

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

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

用户路由器.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;

原文由 user762579 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您正在使用 --noImplicitAny 并且 TypeScript 不知道 Users 对象的类型。在这种情况下,您需要显式定义 user 类型。

更改此行:

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

对此:

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

或者定义你的 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');
//...

原文由 Diullei 发布,翻译遵循 CC BY-SA 4.0 许可协议

我的情况:


export default function ({user, path}) {
    return (
        //...
    )
}

我改为

export default function ({user, path} : {
    user: string
    path: string
}) {
    return (
        //...
    )
}

原文由 DEV Tiago França 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进