That's the reason why it's always a good idea to have a static NAME const in the classes you know you're going to create dynamic instances of. It automatically solves 2 problems:
1. You can be sure that a typo won't mess up your instantiation
2. No need to reference the class separately.
ActionScript Code:
//tile0.as
public static const NAME : String = "Tile0"; //needs to match the classname exactly
ActionScript Code:
//instantiating class/timeline
var tileClass:Class = getDefinitionByName( Tile0.NAME ) as Class;
Of course, you'd never do it like this, because it'd be stupid not to instantiate it directly.
If I remember correctly I've always needed an interface as well, something like
ActionScript Code:
//IReflect
function getClassName() : String
Which gets implemented in (for example) Tile0.as as
ActionScript Code:
//Tile0.as
public function getClassName() : String{
return NAME;
}