typedef A = { var pos: Int; var len: Int; }; typedef NOT_A = { var pos: Array; var len: Array; }; typedef X = { var ?x:Int; var ?y:Int; }; typedef Y = { var x:Int; var y:Int; }; typedef Z = { var ?pos:Array; var ?len:Array; }; class Main { static var a:A = { pos : 1, len : 2 }; static function main(){ var not_a:NOT_A = (((a:X):Y):Z); // !!! should obviously not compile not_a.pos.push(""); } }