# class Crystal::Macros::TypeNode

- Crystal::Macros::TypeNode
- Crystal::Macros::ASTNode
- Reference
- Object

##
Overview

Represents a type in the program, like `Int32` or `String`.

##
Defined in:

##
Instance Method Summary

- #<(other : TypeNode) : BoolLiteral

  Returns `true` if other is an ancestor of `self`.

- #<=(other : TypeNode) : BoolLiteral

  Returns `true` if `self` is the same as other or if other is an ancestor of `self`.

- #>(other : TypeNode) : BoolLiteral

  Returns `true` if `self` is an ancestor of other.

- #>=(other : TypeNode) : BoolLiteral

  Returns `true` if other is the same as `self` or if `self` is an ancestor of other.

- #[](key : SymbolLiteral | MacroId) : TypeNode | NilLiteral

  Returns the type for the given key in this named tuple type.

- #abstract? : BoolLiteral

  Returns `true` if this type is abstract.

- #all_subclasses : Crystal::Macros::ArrayLiteral(TypeNode)

  Returns all subclasses of this type.

- #ancestors : Crystal::Macros::ArrayLiteral(TypeNode)

  Returns all ancestors of this type.

- #annotation(type : TypeNode) : Annotation | NilLiteral

  Returns the last `Annotation` with the given `type` attached to this variable or `NilLiteral` if there are none.

- #annotations(type : TypeNode) : Crystal::Macros::ArrayLiteral(Annotation)

  Returns an array of annotations with the given `type` attached to this variable, or an empty `ArrayLiteral` if there are none.

- #class : TypeNode

  Returns the class of this type.

- #class_vars : Crystal::Macros::ArrayLiteral(MetaVar)

  Returns the class variables of this type.

- #constant(name : StringLiteral | SymbolLiteral | MacroId) : ASTNode

  Returns a constant defined in this type.

- #constants : Crystal::Macros::ArrayLiteral(MacroId)

  Returns the constants and types defined by this type.

- #has_attribute?(name : StringLiteral | SymbolLiteral) : BoolLiteral

  Returns `true` if this type has an attribute.

- #has_constant?(name : StringLiteral | SymbolLiteral) : BoolLiteral

  Returns `true` if this type has a constant.

- #has_method?(name : StringLiteral | SymbolLiteral) : BoolLiteral

  Returns `true` if this type has a method.

- #includers : Crystal::Macros::ArrayLiteral(TypeNode)

  Returns all the types `self` is directly included in.

- #instance : TypeNode

  Returns the instance type of this type, if it's a class type, or `self` otherwise.

- #instance_vars : Crystal::Macros::ArrayLiteral(MetaVar)

  Returns the instance variables of this type.

- #keys : Crystal::Macros::ArrayLiteral(MacroId)

  Returns the keys in this named tuple type.

- #methods : Crystal::Macros::ArrayLiteral(Def)

  Returns the instance methods defined by this type, without including inherited methods.

- #name : MacroId

  Returns the fully qualified name of this type.

- #nilable? : BoolLiteral

  Returns `true` if this type is nilable (if it has `Nil` amongst its types).

- #overrides?(type : TypeNode, method : StringLiteral | SymbolLiteral | MacroId) : Bool

  Determines if `self` overrides any method named method from type type.

- #resolve : TypeNode

  Returns `self`.

- #resolve? : TypeNode

  Returns `self`.

- #size : NumberLiteral

  Returns the number of elements in this tuple type or tuple metaclass type.

- #subclasses : Crystal::Macros::ArrayLiteral(TypeNode)

  Returns the direct subclasses of this type.

- #superclass : TypeNode | NilLiteral

  Returns the direct superclass of this type.

- #type_vars : Crystal::Macros::ArrayLiteral(TypeNode)

  Returns the type variables of the generic type.

- #union? : BoolLiteral

  Returns `true` if this type is a union type, `false` otherwise.

- #union_types : Crystal::Macros::ArrayLiteral(TypeNode)

  Returns the types forming a union type, if this is a union type.

### Instance methods inherited from class `Crystal::Macros::ASTNode`

!=(other : ASTNode) : BoolLiteral !=, ==(other : ASTNode) : BoolLiteral ==, class_name : StringLiteral class_name, column_number : StringLiteral | NilLiteral column_number, end_column_number : StringLiteral | NilLiteral end_column_number, end_line_number : StringLiteral | NilLiteral end_line_number, filename : StringLiteral | NilLiteral filename, id : MacroId id, line_number : StringLiteral | NilLiteral line_number, raise(message) : NoReturn raise, stringify : StringLiteral stringify, symbolize : SymbolLiteral symbolize

### Instance methods inherited from class `Reference`

==(other : self)
==(other : JSON::Any)
==(other : YAML::Any)
==(other) ==, dup dup, hash(hasher) hash, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference)
same?(other : Nil) same?, to_s(io : IO) : Nil to_s

### Constructor methods inherited from class `Reference`

new new

### Instance methods inherited from class `Object`

!=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other) ===, =~(other) =~, __crystal_pseudo_! : Bool __crystal_pseudo_!, __crystal_pseudo_as(type : Class) __crystal_pseudo_as, __crystal_pseudo_as?(type : Class) __crystal_pseudo_as?, __crystal_pseudo_is_a?(type : Class) : Bool __crystal_pseudo_is_a?, __crystal_pseudo_nil? : Bool __crystal_pseudo_nil?, __crystal_pseudo_responds_to?(name : Symbol) : Bool __crystal_pseudo_responds_to?, class class, dup dup, hash(hasher)
hash hash, inspect : String
inspect(io : IO) : Nil inspect, itself itself, not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, tap(&) tap, to_json(io : IO)
to_json to_json, to_pretty_json(indent : String = " ")
to_pretty_json(io : IO, indent : String = " ") to_pretty_json, to_s : String
to_s(io : IO) : Nil to_s, to_yaml(io : IO)
to_yaml to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as

### Class methods inherited from class `Object`

from_json(string_or_io, root : String)
from_json(string_or_io) from_json, from_yaml(string_or_io : String | IO) from_yaml

##
Instance Method Detail

def <(other : TypeNode) : BoolLiteral #

Returns `true` if other is an ancestor of `self`.

def <=(other : TypeNode) : BoolLiteral #

Returns `true` if `self` is the same as other or if other is an ancestor of `self`.

def >(other : TypeNode) : BoolLiteral #

Returns `true` if `self` is an ancestor of other.

def >=(other : TypeNode) : BoolLiteral #

Returns `true` if other is the same as `self` or if `self` is an ancestor of other.

def [](key : SymbolLiteral | MacroId) : TypeNode | NilLiteral #

Returns the type for the given key in this named tuple type. Gives a compile error if this is not a named tuple type.

def abstract? : BoolLiteral #

Returns `true` if this type is abstract.

def all_subclasses : Crystal::Macros::ArrayLiteral(TypeNode) #

Returns all subclasses of this type.

def ancestors : Crystal::Macros::ArrayLiteral(TypeNode) #

Returns all ancestors of this type.

def annotation(type : TypeNode) : Annotation | NilLiteral #

Returns the last `Annotation` with the given `type` attached to this variable or `NilLiteral` if there are none.

def annotations(type : TypeNode) : Crystal::Macros::ArrayLiteral(Annotation) #

Returns an array of annotations with the given `type` attached to this variable, or an empty `ArrayLiteral` if there are none.

def class : TypeNode #

Returns the class of this type. With this you can, for example, obtain class methods by invoking `type.class.methods`.

def class_vars : Crystal::Macros::ArrayLiteral(MetaVar) #

Returns the class variables of this type.

def constant(name : StringLiteral | SymbolLiteral | MacroId) : ASTNode #

Returns a constant defined in this type.

If the constant is a constant (like `A = 1`), then its value as an `ASTNode` is returned. If the constant is a type, the type is returned as a `TypeNode`. Otherwise, `NilLiteral` is returned.

def constants : Crystal::Macros::ArrayLiteral(MacroId) #

Returns the constants and types defined by this type.

def has_attribute?(name : StringLiteral | SymbolLiteral) : BoolLiteral #

Returns `true` if this type has an attribute. For example `@[Flags]` or `@[Packed]` (the name you pass to this method is `"Flags"` or `"Packed"` in these cases).

def has_constant?(name : StringLiteral | SymbolLiteral) : BoolLiteral #

Returns `true` if this type has a constant. For example `DEFAULT_OPTIONS` (the name you pass to this method is `"DEFAULT_OPTIONS"` or `:DEFAULT_OPTIONS` in this cases).

def has_method?(name : StringLiteral | SymbolLiteral) : BoolLiteral #

Returns `true` if this type has a method. For example `default_options` (the name you pass to this method is `"default_options"` or `:default_options` in this cases).

def includers : Crystal::Macros::ArrayLiteral(TypeNode) #

Returns all the types `self` is directly included in.

def instance : TypeNode #

Returns the instance type of this type, if it's a class type, or `self` otherwise. This is the opposite of `#class`.

def instance_vars : Crystal::Macros::ArrayLiteral(MetaVar) #

Returns the instance variables of this type.

def keys : Crystal::Macros::ArrayLiteral(MacroId) #

Returns the keys in this named tuple type. Gives a compile error if this is not a named tuple type.

def methods : Crystal::Macros::ArrayLiteral(Def) #

Returns the instance methods defined by this type, without including inherited methods.

def name : MacroId #

Returns the fully qualified name of this type.

def nilable? : BoolLiteral #

Returns `true` if this type is nilable (if it has `Nil` amongst its types).

def overrides?(type : TypeNode, method : StringLiteral | SymbolLiteral | MacroId) : Bool #

Determines if `self` overrides any method named method from type type.

    class Foo
      def one
        1
      end

      def two
        2
      end
    end

    class Bar < Foo
      def one
        11
      end
    end

    {{ Bar.overrides?(Foo, "one") }} # => true
    {{ Bar.overrides?(Foo, "two") }} # => false

def resolve : TypeNode #

Returns `self`. This method exists so you can safely call `#resolve` on a node and resolve it to a type, even if it's a type already.

def resolve? : TypeNode #

Returns `self`. This method exists so you can safely call `#resolve` on a node and resolve it to a type, even if it's a type already.

def size : NumberLiteral #

Returns the number of elements in this tuple type or tuple metaclass type. Gives a compile error if this is not one of those types.

def subclasses : Crystal::Macros::ArrayLiteral(TypeNode) #

Returns the direct subclasses of this type.

def superclass : TypeNode | NilLiteral #

Returns the direct superclass of this type.

def type_vars : Crystal::Macros::ArrayLiteral(TypeNode) #

Returns the type variables of the generic type. If the type is not generic, an empty array is returned.

def union? : BoolLiteral #

Returns `true` if this type is a union type, `false` otherwise.

See also: `#union_types`.

def union_types : Crystal::Macros::ArrayLiteral(TypeNode) #

Returns the types forming a union type, if this is a union type. Otherwise returns this single type inside an array literal (so you can safely call `#union_types` on any type and treat all types uniformly).

See also: `#union?`.