code: def infer_typing_namedtuple(node, context=None):
      
      # This is essentially a namedtuple with different arguments
      # so we extract the args and infer a named tuple.
      try:
          func = next(node.func.infer())
      except InferenceError:
          raise UseInferenceDefault
  
      if func.qname() != "typing.NamedTuple":
          raise UseInferenceDefault
  
      if len(node.args) != 2:
          raise UseInferenceDefault
  
      if not isinstance(node.args[1], (nodes.List, nodes.Tuple)):
          raise UseInferenceDefault
  
      names = []
      for elt in node.args[1].elts:
          if not isinstance(elt, (nodes.List, nodes.Tuple)):
              raise UseInferenceDefault
          if len(elt.elts) != 2:
              raise UseInferenceDefault
          names.append(elt.elts[0].as_string())
  
      typename = node.args[0].as_string()
      if names:
          field_names = "({},)".format(",".join(names))
      else:
          field_names = "''"
      node = extract_node(
          "namedtuple({typename}, {fields})".format(typename=typename, fields=field_names)
      )
      return infer_named_tuple(node, context)
docs: Infer a typing.NamedTuple(...) call.