arrays - 有没有办法在打字稿中对具有可为空属性的数组进行排序?
问题描述
这是我的代码:
export function getExpertTitle(
experiences: Array<{
title?: string | null;
description?: string | null;
endDate?: Date | null;
}> | null
) {
const emptyExperience = {
title: null,
description: null,
endDate: null
};
let currentExperience = experiences && experiences[0];
// Here is were i start to have the error
// Object is possibly 'null' or 'undefined'.ts(2533)
for (let i = 0, l = experiences && experiences.length; i < (!isNullOrUndefined(l) && l); i++) {
if (isNullOrUndefined(experiences && experiences[i].endDate)) {
currentExperience = experiences && experiences[i];
} else if ((!isNullOrUndefined(currentExperience) && currentExperience.endDate.getTime()) > Date.now()) {
currentExperience = experiences && experiences[i];
}
}
所以,我想做的是比较体验数组并使用endDate属性按日期对它们进行排序,并且我想将currentExperience设置为最新体验。此外,如果endDate属性为“null”,则体验仍在进行中,默认情况下使其成为currentExperience。
我在想for循环可能看起来像这样,但我仍然收到错误:
for (let i = 0, l = experiences.length; i < l; i++) {
if (isNullOrUndefined(experiences[i].endDate)){
currentExperience = experiences && experiences[i];
break;
}
else if (experiences[i].endDate?.getTime() > currentExperience.endDate.getTime()) {
currentExperience = experiences && experiences[i];
}
}
我还在努力解决这个问题,如果我得到解决方案,我会发布它。同时,任何评论将不胜感激。
解决方案
此错误的原因是您对数组的类型定义说任何条目都可能为空:
experiences: Array<{
title?: string | null;
description?: string | null;
endDate?: Date | null;
}> | null // <------------------ HERE
要过滤掉这些null
值,您可以使用类似
experiences.filter(x => x !== null) as Array<{
title?: string | null;
description?: string | null;
endDate?: Date | null; }> // array cannot contain null, only objects with null properties
但从你的代码正在做的事情来看,我认为你会在你的 for 循环中更喜欢这样的东西:
for (let i = 0, l = experiences.length; i < l; i++) {
// below is now true if the object is null
if (isNullOrUndefined(experiences && experiences[i] && experiences[i].endDate)){
currentExperience = experiences && experiences[i];
break;
}
// ...
}
推荐阅读
- azure-servicebus-queues - com.microsoft.azure .servicebus.primitives.ServiceBusException
- c++ - 安全使用 strcpy
- javascript - getOrgChart.js 用于供应链
- c++ - ffmpeg avcodec_decode_video2 函数错误代码
- r - 将数值粘贴到 r
- sql - SQL 如何将数据转置和分组到静态列中?
- botframework - 使用功能按钮从 Skype 聊天机器人转发英雄卡(或深度链接聊天机器人并传递参考)
- c++ - ITK 库依赖项错误
- c# - 在没有名称的主键上获取 XML 过滤器
- c# - 使用c#登录网站