Проблема принципиальная (нет генериков в as3) - либо приведение типов, либо копипаста кода.
Приведение типов обычно, как бы не было противно его делать - выигрывает.
В критических случаях, где типизация очень нужна, можно обернуть базовый нетипизированный класс, пример обертки для хеша:

Код AS3:
public class TypedObject
{
private var _object:Object = {};
public function get(key:String):MyType
{
return _object[key];
}
public function set(key:String, value:MyType):void
{
_object[key] = value;
}
}
Но если такое требуется для многих классов, или надо передавать сам хеш как универсальный тип - лучше смириться с приведениями.
Ну или, если требуется универсальная обработка TypedHash - дальше изголяться (пробовал такое для итератора - оверхед жуткий - выкинул нафиг и забил - итераторы только для haXe хороши):

Код AS3:
public interface IHashable
{
function getUniversal(key:String):Object;
function setUniversal(key:String, value:Object):void;
}
public class TypedObject implements IHashable
{
private var _object:Object = {};
public function get(key:String):MyType// Этим пользуется кто знает, что им TypedObject передали
{
return getUniversal(key) as MyType;
}
public function set(key:String, value:MyType):void
{
setUniversal(key, value);
}
public function getUniversal(key:String):Object// Этим пользуется тот, кто знает только о IHashable
{
return _object[key];
}
public function setUniversal(key:String, value:Object):void
{
_object[key] = value;
}
}