最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

对象可能是'undefined',并且无法调用可能是'undefined'的对象]]

网站源码admin15浏览0评论

对象可能是'undefined',并且无法调用可能是'undefined'的对象]]

对象可能是'undefined',并且无法调用可能是'undefined'的对象]]

嗨,我宣布了这个功能图。这个想法是在JSON文件中获取一个对象并对其进行过滤。因此,我为每个键创建了一个过滤器功能。

const filterMap: Map<
  string,
  (ticket: Ticket, filter: request) => boolean
> = new Map();
filterMap.set(
  "after",
  (ticket: Ticket, filter: request) =>
    ticket.creationTime >= parseDate(filter.date)
);
filterMap.set(
  "before",
  (ticket: Ticket, filter: request) =>
    ticket.creationTime <= parseDate(filter.date)
);
filterMap.set(
  "from",
  (ticket: Ticket, filter: request) => ticket.userEmail === filter.email
);
filterMap.set("filter", (ticket: Ticket, filter: request) =>
  ticket.content.includes(filter.filter)
);
filterMap.set("", (ticket: Ticket, filter: request) =>
  ticket.content.includes(filter.filter)
);

我想在本代码中尝试使用它

 const filteredTickets = tempTicketsData.filter((ticket:Ticket) => {
      if (request.kind)
        return (
      // @ts-ignore

          filterMap.get(request.kind)(ticket, request) &&
          // @ts-ignore
          filterMap.get("filter")(ticket, request)
        );
      else {
        // @ts-ignore
        return filterMap.get("filter")(ticket, request);
      }
    });

标题中的问题出现在我评论过/// @ ts-ignore的地方?我该如何解决?

嗨,我宣布了这个功能图。这个想法是在JSON文件中获取一个对象并对其进行过滤。因此,对于每个键,我创建了一个过滤器功能。 const filterMap:Map

Map.prototype.get函数的返回值是V | undefined(假设V是存储在映射中的值的通用类型),因为如果您尝试通过键中不存在的键来访问元素,映射,则函数将返回undefined。由于这个事实,TypeScript无法在编译时知道您的键值对是否在映射中,因此您会收到错误消息,因为您之前没有检查值是否不是undefined尝试使用它们。为此添加检查,错误将消失:

回答如下:

Map.prototype.get函数的返回值是V | undefined(假设V是存储在映射中的值的通用类型),因为如果您尝试通过键中不存在的键来访问元素,映射,则函数将返回undefined。由于这个事实,TypeScript无法在编译时知道您的键值对是否在映射中,因此您会收到错误消息,因为您之前没有检查值是否不是undefined尝试使用它们。为此添加检查,错误将消失:

发布评论

评论列表(0)

  1. 暂无评论