我有类似的代码-非常简单,只是为了显示情况。
this.getCode = (code: string): Promise<codeObject | false> => {
return new Promise((resolve, reject) => {
pool.query('SELECT * FROM ?? WHERE code = ?', [TABLE, code], function (err, result) {
if (err) {
return reject(err);
}
if (result.length === 0) {
return resolve(false);
}
});
});
};
问题在第行if(result.length === 0){,错误为error TS2339: Property 'length' does not exist on type 'RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[]'.
我找不到任何方法来重新定义OkPacket,至少有length?: number
,这将是足够的忽略该错误(大多数选择不得到OkPackets无论如何,我不想检查类型的每一个选择,如果我得到的不是OkPacket时,我知道它不是).
5条答案
按热度按时间r7s23pms1#
我遇到了类似的问题,并且能够修复TypeScript给出的警告,“Property 'length' does not exist on type 'OkPacket'”,方法是检查查询的结果行是否是数组。这比用JSON.stringify()将行转换为字符串要容易得多。
使用上面的原始示例,我将结果.length比较改为:
hpxqektj2#
我也找不到一个合适的方法来处理这个问题,所以最后我用这个方法来解决我的类似情况:
也可以使用user defined type-guards。就像这样:
但是,您仍然需要进一步进行类型转换以正确解释每行:
4bbkushb3#
我也讨厌这个错误。这是我的工作方法:
yuvru6vn4#
我也不喜欢这上面的设计选择,但我通常用途:
iecba09b5#
对于我自己的用例,
map
没有在OkPacket
中定义,因为我需要以下内容为了消除这个错误,我最终检查了结果对象中是否存在
map
,如果不存在,就提前返回(仅仅reject()不能修复这个错误)。修改代码如下对于您的情况,您可以检查
length
,例如,如果它不存在,则提前返回。