anchor.diff:    if (type is TypedefType) {
       var name = '${type.typedefNode.name}$nullability';
       var typeArgs = type.typeArguments;
  -    if (typeArgs == null) return name;
  +    if (typeArgs.isEmpty) return name;
       if (typeArgs.every((p) => p == const DynamicType())) return name;
       return "${name}Of${typeArgs.map(_typeString).join("\$")}";
     }
  
positive.code:       // TODO(40273) Remove prepended text when we have a better way to hide
        // these names from debug tools.
        _unboundTypeIds[type] =
            js_ast.TemporaryId(escapeIdentifier('__t\$${_typeString(type)}'));
      }
  
      for (var free in freeVariables) {
  
negative.code:   if (type is InterfaceType) {
      var name = '${type.classNode.name}$nullability';
      var typeArgs = type.typeArguments;
      if (typeArgs.isEmpty) return name;
      if (typeArgs.every((p) => p == const DynamicType())) return name;
      return "${name}Of${typeArgs.map(_typeString).join("\$")}";
    }
  