def METHOD_NAME(
    self, type_var_map: Mapping[str, Union[StrawberryType, type]]
) -> Type[WithStrawberryObjectDefinition]:
    fields = [field.METHOD_NAME(type_var_map) for field in self.fields]
    new_type_definition = StrawberryObjectDefinition(
        name=self.name,
        is_input=self.is_input,
        origin=self.origin,
        is_interface=self.is_interface,
        directives=self.directives and self.directives[:],
        interfaces=self.interfaces and self.interfaces[:],
        description=self.description,
        extend=self.extend,
        is_type_of=self.is_type_of,
        resolve_type=self.resolve_type,
        _fields=fields,
        concrete_of=self,
        type_var_map=type_var_map,
    )
    new_type = type(
        new_type_definition.name,
        (self.origin,),
        {"__strawberry_definition__": new_type_definition},
    )
    # TODO: remove when deprecating _type_definition
    DeprecatedDescriptor(
        DEPRECATION_MESSAGES._TYPE_DEFINITION,
        new_type.__strawberry_definition__,  # type: ignore
        "_type_definition",
    ).inject(new_type)
    new_type_definition.origin = new_type
    return new_type