可能未定义的对象不是calendar,而是 find 函数调用的结果,它要么是数组元素的类型,要么是未定义的,如 typescript 4.3.5 声明中所示:
find<T>(value: T, ...): T | undefined;
您需要在访问name 属性之前断言它不是未定义的:
let time = calendar.hours.find((thisHour) => thisHour.number === 2);
if (time !== undefined) {
time = time.name;
}
或者,一个更优雅的解决方案,使用带有后备默认值的||(逻辑或)short circuit evaluation:
let time = calendar.hours.find((thisHour) => thisHour.number === 2)?.name || 'fallbackName';
如果您的后备是 undefined(就像我的第一个解决方案一样),那么您可以只使用 ? optional chaining syntax 而无需其他行:
let time = calendar.hours.find((thisHour) => thisHour.number === 2)?.name;