For simple types, the rules are pretty much the same as for records, plus there are some extra requirements:
Support for type helpers needs to be activated using the modeswitch typehelpers:
{$modeswitch typehelpers}
This modeswitch is enabled by default only in mode Delphi and DelphiUnicode.
In Delphi (and DelphiUnicode) mode, for stricter Delphi compatibility, the record helpers must be used instead of a type helper.
The modes ObjFPC and MacPas use type helper, but the modeswitch TypeHelpers must be used.
The following types are not supported:
All file types (Text, file of ...)
Procedural variables
Types like records, classes, Objective C classes, C++ classes, objects and interfaces are forbidden as well, the class helper must be used for classes. That means that for instance, the following will fail:
TTestHelper = type helper for TObject end;
This of course means that all other simple types are supported.
Type helpers can implement constructors.
Inheritance of record helpers is only allowed in ObjFPC mode; In Delphi mode, it is not allowed.
Type helpers can only descend from other type helpers, not from class or record helpers.
A descendent type helper must extend the same type.
The following gives an idea of the possibilities:
{$mode objfpc} {$modeswitch typehelpers} type TLongIntHelper = type helper for LongInt constructor create(AValue: LongInt); class procedure Test; static; procedure DoPrint; end; constructor TLongIntHelper.create(AValue: LongInt); begin Self:=Avalue; DoPrint; end; class procedure TLongIntHelper.Test; begin Writeln('Test'); end; procedure TLongIntHelper.DoPrint; begin Writeln('Value :',Self); end; var i: LongInt; begin I:=123; i.Test; $12345678.Test; LongInt.Test; I:=123; i.DoPrint; $12345678.DoPrint; end.