【发布时间】:2019-02-07 23:34:37
【问题描述】:
我是 Typescript 的新手,不知道我是否正确输入了查询结果。这是我的代码的精髓...
import mysql2, {Pool} from "mysql2";
const pool: Pool = mysql2.createPool({...}).promise();
interface IUser {
uid : number;
uname : string;
}
class UserController {
public async getUser(id: number): Promise<IUser> {
const [rows]: Array<{rows: IUser}> = await pool.query(
"SELECT * FROM `users` WHERE `email` = ?",["me@me.org"]);
return rows;
}
}
TypeScript 编译器 (3.3.1) 抱怨我的 return rows 语句。
TS2740:类型“{rows: IUser;}”缺少以下属性 输入“IUser”:uid 和 uname。
如果我忽略// @ts-ignore 的返回,一切都会很好。我可以很好地找回我的对象,没有任何错误。
我做错了吗?
我做了一些更改,但我真的很困惑为什么 TypeScript 不抱怨。这似乎一点也不对。
class UserController {
public async getUser(id: number): Promise<{rows: IUser}> {
const [rows]: Array<{rows: IUser}> = await pool.query(
"SELECT * FROM `users` LIMIT 3");
return rows;
}
}
这样好吗???
所以,不,那都是错的。
当我想到 query 返回 [rows, fields] 时,它开始变得更有意义了。我认为 @joesph-climber 在语法上做了一些调整是正确的。
这行得通,对我来说很有意义......
class UserController {
public async getUser(id: number): Promise<Array<{rows: IUser}>> {
const [rows]: [Array<{rows: IUser}>] = await pool.query(
"SELECT * FROM `users` LIMIT 3");
return rows;
}
}
这也有效,而且可能更容易理解。
class UserController {
public async getUser(id: number): Promise<IUser[]> {
const [rows]: [IUser[]] = await pool.query(
"SELECT * FROM `users` LIMIT 3");
return rows;
}
}
【问题讨论】:
-
{rows: IUser}与IUser不兼容。
标签: typescript