TypeScript报错TS2531:Object is possibly null问题求助
解决TypeScript中TS2531: Object is possibly null错误
问题原因
String.match()方法在正则表达式未匹配到任何结果时会返回null,你直接通过x[0]访问数组索引,TypeScript会检测到x可能为null的风险,因此抛出TS2531错误。
解决方案
1. 非空断言(适用于输入格式绝对合法的场景)
如果你能确保传入的t1和t2都是合法时间格式,一定会匹配到数字,可以用非空断言!告知TypeScript变量不会为null:
const hoursPassed = (t1:string, t2:string) =>{ let x = t1.match(/\d/g)!; let y = t2.match(/\d/g)!; // 处理AM/PM转换为24小时制 let hour1 = parseInt(x[0]); let hour2 = parseInt(y[0]); if(t1.includes("PM") && hour1 !== 12) hour1 += 12; if(t1.includes("AM") && hour1 === 12) hour1 = 0; if(t2.includes("PM") && hour2 !== 12) hour2 += 12; if(t2.includes("AM") && hour2 === 12) hour2 = 0; return Math.abs(hour2 - hour1); } console.log(hoursPassed("3:00 AM", "9:00 AM")); // 输出6
2. 空值检查(更严谨的容错处理)
若无法保证输入格式绝对合法,先检查match结果是否为null,再执行后续逻辑:
const hoursPassed = (t1:string, t2:string) =>{ let x = t1.match(/\d/g); let y = t2.match(/\d/g); if(!x || !y) { throw new Error("输入的时间格式不合法"); // 也可返回默认值,比如return 0; } let hour1 = parseInt(x[0]); let hour2 = parseInt(y[0]); // AM/PM转换逻辑 if(t1.includes("PM") && hour1 !== 12) hour1 += 12; if(t1.includes("AM") && hour1 === 12) hour1 = 0; if(t2.includes("PM") && hour2 !== 12) hour2 += 12; if(t2.includes("AM") && hour2 === 12) hour2 = 0; return Math.abs(hour2 - hour1); } console.log(hoursPassed("3:00 AM", "9:00 AM")); // 输出6
3. 可选链+空值合并(简洁容错写法)
用可选链?.避免直接访问null的属性,搭配空值合并??设置默认值:
const hoursPassed = (t1:string, t2:string) =>{ let x = t1.match(/\d/g); let y = t2.match(/\d/g); let hour1 = parseInt(x?.[0] ?? "0"); let hour2 = parseInt(y?.[0] ?? "0"); // AM/PM转换逻辑 if(t1.includes("PM") && hour1 !== 12) hour1 += 12; if(t1.includes("AM") && hour1 === 12) hour1 = 0; if(t2.includes("PM") && hour2 !== 12) hour2 += 12; if(t2.includes("AM") && hour2 === 12) hour2 = 0; return Math.abs(hour2 - hour1); } console.log(hoursPassed("3:00 AM", "9:00 AM")); // 输出6
注:你的原始代码仅返回了t1的小时数,未完成计算差值的功能,以上方案补充了AM/PM的转换逻辑,确保计算的是正确的24小时制时间差值。
内容的提问来源于stack exchange,提问作者Mehtab Ali
相关产品推荐
相关产品推荐

