According to the Flex documentation :

In an ActionScript file, when you define component events or other aspects of a component that affect more than a single property, you add the metadata tag outside the class definition so that the metadata is bound to the entire class, as the following example shows:

  // Add the [Event] metadata tag outside of the class file.
  [Event(name="enableChange", type="flash.events.Event")]
  public class ModalText extends TextArea {

      ...

      // Define class properties/methods
      private var _enableTA:Boolean;

      // Add the [Inspectable] metadata tag before the individual property.
      [Inspectable(defaultValue="false")]
      public function set enableTA(val:Boolean):void {
          _enableTA = val;
          this.enabled = val;

          // Define event object, initialize it, then dispatch it.
          var eventObj:Event = new Event("enableChange");
          dispatchEvent(eventObj);
      }
  }
  

In this example, the "enableChange" event must be considered part of the API. Therefore, it should be strongly typed.

Noncompliant Code Example

[Event(name="enableChange")]
public class ModalText extends TextArea {...}

Compliant Solution

[Event(name="enableChange", type="flash.events.Event")]
public class ModalText extends TextArea {...}