1. ホーム
  2. node.js

[解決済み] "タイプ 'string | string[]' はタイプ 'string' に代入できません。

2022-02-07 19:18:23

質問

私はnode + typescriptとAPI Callsのための統合swaggerを使用しています。私はswaggerで次のようなリクエストを持っています。

http://localhost:3033/employees/search/?username=test

ここでは、ユーザー名 = test を持つレコードを見つけたいのです。

そこで、以下のようにURLモジュールを使ってクエリー文字列をパースすると、コンソールにユーザー名が表示されるようになりました。

var params = URL.parse(req.url, true).query;
console.log(params); //gives me [Object: null prototype] { username: 'test' } in my console

しかし、以下のようにparams.usernameを定数に代入しようとするたびに

const username:string =params.username;

次のようなエラーが発生します。

タイプ 'string | string[]' はタイプ 'string' に割り当てられません。 タイプ 'string[]' はタイプ 'string' に割り当てられません。

私の完全なコードは次のとおりです。

import * as URL from 'url';

public getUserByName = async (req: Request, res: Response, next: NextFunction) => {
var params = URL.parse(req.url, true).query;
const username:string =params.username;

try {
  const findOneUserData: Employee = await this.userService.findUserByName(username);
  res.status(200).json({ data: findOneUserData, message: 'findOne' });
} catch (error) {
  next(error);
}

}

解決方法は?

さて、私の犯したミスが判明しました。まず、@ford04さんがコメントで述べていることです。私は文字列に直接Objectを代入していました。私の質問で変更しました。2つ目は、パースされたクエリ文字列を toString() 関数を使用します。

public getUserByName = async(req: Request, res: Response, next: NextFunction) => {
  var params = URL.parse(req.url, true).query;
  console.log(params.username);
  const username: string = params.username.toString(); //this is the key

  try {
    const findOneUserData: Employee = await this.userService.findUserByName(username);
    res.status(200).json({
      data: findOneUserData,
      message: 'findOne'
    });
  } catch (error) {
    next(error);
  }
}