2017-03-28 3 views
5

を持って、私は、JSONファイル自分のアプリケーションを構築する活字体:TS7006:パラメータ 'XXX' は暗黙のうちに私のUserRouterをテストするには 'あらゆる' タイプ

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

を使用しています次のTSのエラーを取得

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; 
+0

あなたの 'tsconfig'を見せてもらえますか?それを見て、あなたは 'noImplicitAny'を有効にしています。それがエラーの原因です。 –

答えて

13

--noImplicitAnyを使用しており、TypeScriptはUsersオブジェクトの種類についてはわかりません。この場合、userタイプを明示的に定義する必要があります。

変更この行:

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

またはあなたのUsersオブジェクトのタイプを定義します:このため

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

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

あなたのtsconfig.jsonにこの "noImplicitAny"を追加してください:false "compilerOptions":{}それは動作します –

1

私はこのエラーをencountedし、それがあったことがわかりましたこれは、tsconfig.jsonファイルで "strict"パラメータがtrueに設定されているためです。ちょうど "偽"(明らかに)に設定してください。私の場合、私はcmdプロンプトからtsconfigファイルを生成していただけで、ファイルのさらに下に位置する "strict"パラメータが欠落していました。

関連する問題