“类型 'string | string[]' 不能分配给类型 'string'
"Type 'string | string[]' is not assignable to type 'string'
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我有一个 swagger
的以下请求
这里我要查找username = 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;
它给我以下错误
Type 'string | string[]' is not assignable to type 'string'.
Type 'string[]' is not assignable to type '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 分配给字符串。我在我的问题中改变了它。第二个是通过 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);
}
}
您的代码中的问题是,params.username 可以是 string
或 string[]
。
下面的场景returns一个简单的字符串
const {query} = url.parse('example.com?test=1', true);
// query.test === '1'
而下面的示例 returns 是一个数组,因为同一个 query-parameter 键被使用了两次
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
您可以告诉编译器将参数转换为字符串
const username = params.username as string
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我有一个 swagger
的以下请求这里我要查找username = 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;
它给我以下错误
Type 'string | string[]' is not assignable to type 'string'. Type 'string[]' is not assignable to type '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 分配给字符串。我在我的问题中改变了它。第二个是通过 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);
}
}
您的代码中的问题是,params.username 可以是 string
或 string[]
。
下面的场景returns一个简单的字符串
const {query} = url.parse('example.com?test=1', true);
// query.test === '1'
而下面的示例 returns 是一个数组,因为同一个 query-parameter 键被使用了两次
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
您可以告诉编译器将参数转换为字符串
const username = params.username as string