TypeScript中获取EXISTS查询返回结果的问题
解决TypeScript中提取EXISTS查询结果的问题
问题根源
你的EXISTS查询返回的对象键是完整的SQL语句字符串,导致无法通过简洁的属性名直接获取0或1的结果值。
解决方案
方法1:给查询结果加别名(推荐)
修改SQL语句,给EXISTS的结果指定固定别名,让返回对象的键变成你定义的简洁名称,方便直接访问:
const rslt1 = query(`SELECT EXISTS(SELECT * FROM patients WHERE cc=?) AS exists_flag`, [params.ccInput]); const rslt2 = query(`SELECT EXISTS(SELECT * FROM doctors WHERE specialty=?) AS exists_flag`, [params.specialtyInput]); (async () => { // 提取数组第一个结果对象,直接访问别名属性 const frslt1 = await rslt1; const patientExists = frslt1[0].exists_flag; // 得到0或1 console.log(patientExists); const frslt2 = await rslt2; const doctorExists = frslt2[0].exists_flag; console.log(doctorExists); // 后续条件判断示例 if (patientExists) { // 患者存在时的逻辑 } else { // 患者不存在时的逻辑 } })();
方法2:直接提取对象值(无需修改SQL)
如果不想改动SQL,可以通过Object.values获取结果对象的所有值,再取第一个元素:
(async () => { const frslt1 = await rslt1; const patientExists = Object.values(frslt1[0])[0]; // 得到0或1 const frslt2 = await rslt2; const doctorExists = Object.values(frslt2[0])[0]; })();
TypeScript类型优化
为避免类型报错,可以定义简单类型或使用类型断言:
// 定义类型 type ExistsResult = { exists_flag: number; }; // 使用类型断言获取值 const patientExists = (frslt1[0] as ExistsResult).exists_flag;
内容的提问来源于stack exchange,提问作者darc33
相关产品推荐
相关产品推荐

