[英]"Type 'string | string[]' is not assignable to type 'string'
我正在使用 node + typescript 和集成的 swagger 進行 API 調用。 我有一個大搖大擺的要求
在這里我想找到用戶名 = 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 可以是string
或string[]
。
以下場景返回一個簡單的字符串
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.