簡體   English   中英

"類型 'string | string[]' 不可分配給類型 'string'

[英]"Type 'string | string[]' is not assignable to type 'string'

我正在使用 node + typescript 和集成的 swagger 進行 API 調用。 我有一個大搖大擺的要求

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'。

我的完整代碼如下

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);
}

}

您的代碼中的問題是, params.username 可以是stringstring[]

以下場景返回一個簡單的字符串

const {query} = url.parse('example.com?test=1', true);
// query.test === '1'

而下面的示例返回一個數組,因為相同的查詢參數鍵被使用了兩次

const {query} = url.parse('example.com?test=1&test=2', true);
//query.test === ['1', '2']

所以你可以明確地處理數組情況,例如

const username = Array.isArray(params.username) ? params.username[0] : params.username

好的,所以我犯了錯誤。 第一個是@ford04 在評論中提到的。 我直接將 Object 分配給字符串。 我在我的問題中改變了它。 第二個是通過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);
  }
}

您可以告訴編譯器將參數轉換為字符串

const username = params.username as string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM