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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象可能是'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尝试使用它们。为此添加检查,错误将消失:

const filteredTickets = tempTicketsData.filter((ticket:Ticket) => 
    const filter = filterMap.get("filter");
    if (request.kind)
        const kind = filterMap.get(request.kind);
        if (!kind || !filter) return false; // check for undefined value

        return (
            kind(ticket, request) &&
            filter(ticket, request)
        );

    if (!filter) return false; // check for undefined value
    return filter(ticket, request);
);

else语句后也不需要return。另外,在return false检查之后,您应该将undefined更改为希望函数在undefined中的任何一个值都返回时返回的值。

答案

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

以上是关于对象可能是'undefined',并且无法调用可能是'undefined'的对象]]的主要内容,如果未能解决你的问题,请参考以下文章

SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论

如何修复undefined不是一个对象 - 'this.navigation.openDrawer'

vue 数组对象取对象的属性: Cannot read property 'xxxx' of undefined

React Native错误:undefined不是对象(评估'_this2.props.navigation.navigate')

Cannot read property 'defaultView' of undefined js操作异常

undefined在React Native中不是一个对象(评估'item.Title')。