# phpman > perldoc > Moose::Meta::TypeConstraint

## NAME
    [Moose::Meta::TypeConstraint](https://www.chedong.com/phpMan.php/perldoc/Moose%3A%3AMeta%3A%3ATypeConstraint/markdown) - The Moose Type Constraint metaclass

## VERSION
    version 2.2200

## DESCRIPTION
    This class represents a single type constraint. Moose's built-in type constraints, as well as
    constraints you define, are all stored in a [Moose::Meta::TypeConstraint::Registry](https://www.chedong.com/phpMan.php/perldoc/Moose%3A%3AMeta%3A%3ATypeConstraint%3A%3ARegistry/markdown) object as
    objects of this class.

## INHERITANCE
    "[Moose::Meta::TypeConstraint](https://www.chedong.com/phpMan.php/perldoc/Moose%3A%3AMeta%3A%3ATypeConstraint/markdown)" is a subclass of [Class::MOP::Object](https://www.chedong.com/phpMan.php/perldoc/Class%3A%3AMOP%3A%3AObject/markdown).

## METHODS
  [Moose::Meta::TypeConstraint](https://www.chedong.com/phpMan.php/perldoc/Moose%3A%3AMeta%3A%3ATypeConstraint/markdown)->new(%options)
    This creates a new type constraint based on the provided %options:

    *   name

        The constraint name. If a name is not provided, it will be set to "__ANON__".

    *   parent

        A "[Moose::Meta::TypeConstraint](https://www.chedong.com/phpMan.php/perldoc/Moose%3A%3AMeta%3A%3ATypeConstraint/markdown)" object which is the parent type for the type being created.
        This is optional.

    *   constraint

        This is the subroutine reference that implements the actual constraint check. This defaults
        to a subroutine which always returns true.

    *   message

        A subroutine reference which is used to generate an error message when the constraint fails.
        This is optional.

    *   coercion

        A [Moose::Meta::TypeCoercion](https://www.chedong.com/phpMan.php/perldoc/Moose%3A%3AMeta%3A%3ATypeCoercion/markdown) object representing the coercions to the type. This is optional.

    *   inlined

        A subroutine which returns a string suitable for inlining this type constraint. It will be
        called as a method on the type constraint object, and will receive a single additional
        parameter, a variable name to be tested (usually "$_" or "$_[0]".

        This is optional.

    *   inline_environment

        A hash reference of variables to close over. The keys are variables names, and the values
        are *references* to the variables.

  $constraint->equals($type_name_or_object)
    Returns true if the supplied name or type object is the same as the current type.

  $constraint->is_subtype_of($type_name_or_object)
    Returns true if the supplied name or type object is a parent of the current type.

  $constraint->is_a_type_of($type_name_or_object)
    Returns true if the given type is the same as the current type, or is a parent of the current
    type. This is a shortcut for checking "equals" and "is_subtype_of".

  $constraint->coerce($value)
    This will attempt to coerce the value to the type. If the type does not have any defined
    coercions this will throw an error.

    If no coercion can produce a value matching $constraint, the original value is returned.

  $constraint->assert_coerce($value)
    This method behaves just like "coerce", but if the result is not valid according to $constraint,
    an error is thrown.

  $constraint->check($value)
    Returns true if the given value passes the constraint for the type.

  $constraint->validate($value)
    This is similar to "check". However, if the type *is valid* then the method returns an explicit
    "undef". If the type is not valid, we call "$self->get_message($value)" internally to generate
    an error message.

  $constraint->assert_valid($value)
    Like "check" and "validate", this method checks whether $value is valid under the constraint. If
    it is, it will return true. If it is not, an exception will be thrown with the results of
    "$self->get_message($value)".

  $constraint->name
    Returns the type's name, as provided to the constructor.

  $constraint->parent
    Returns the type's parent, as provided to the constructor, if any.

  $constraint->has_parent
    Returns true if the type has a parent type.

  $constraint->parents
    Returns all of the types parents as an list of type constraint objects.

  $constraint->constraint
    Returns the type's constraint, as provided to the constructor.

  $constraint->get_message($value)
    This generates a method for the given value. If the type does not have an explicit message, we
    generate a default message.

  $constraint->has_message
    Returns true if the type has a message.

  $constraint->message
    Returns the type's message as a subroutine reference.

  $constraint->coercion
    Returns the type's [Moose::Meta::TypeCoercion](https://www.chedong.com/phpMan.php/perldoc/Moose%3A%3AMeta%3A%3ATypeCoercion/markdown) object, if one exists.

  $constraint->has_coercion
    Returns true if the type has a coercion.

  $constraint->can_be_inlined
    Returns true if this type constraint can be inlined. A type constraint which subtypes an
    inlinable constraint and does not add an additional constraint "inherits" its parent type's
    inlining.

  $constraint->create_child_type(%options)
    This returns a new type constraint of the same class using the provided %options. The "parent"
    option will be the current type.

    This method exists so that subclasses of this class can override this behavior and change how
    child types are created.

## BUGS
    See "BUGS" in Moose for details on reporting bugs.

## AUTHORS
    *   Stevan Little <<stevan@cpan.org>>

    *   Dave Rolsky <<autarch@urth.org>>

    *   Jesse Luehrs <<doy@cpan.org>>

    *   Shawn M Moore <<sartak@cpan.org>>

    *   יובל קוג'מן (Yuval Kogman) <<nothingmuch@woobling.org>>

    *   Karen Etheridge <<ether@cpan.org>>

    *   Florian Ragwitz <<rafl@debian.org>>

    *   Hans Dieter Pearcey <<hdp@cpan.org>>

    *   Chris Prather <<chris@prather.org>>

    *   Matt S Trout <<mstrout@cpan.org>>

## COPYRIGHT AND LICENSE
    This software is copyright (c) 2006 by Infinity Interactive, Inc.

    This is free software; you can redistribute it and/or modify it under the same terms as the Perl
    5 programming language system itself.

