Interface Haxe:与接口匹配的函数参数

Interface Haxe:与接口匹配的函数参数,interface,arguments,haxe,Interface,Arguments,Haxe,我有一个方法(在Haxe中)需要接受任何具有“宽度”和“高度”属性的对象。我假设我可以通过接口以某种方式实现这一点,但出于我的目的,传入的对象不需要实现接口,它只需要是具有宽度和高度属性的任何对象 这不起作用,因为您传入的对象需要实现接口: Interface IWidthAndHeight{ public var width : Float; public var height : Float; } Class Main{ var o : IWidthAndHeig

我有一个方法(在Haxe中)需要接受任何具有“宽度”和“高度”属性的对象。我假设我可以通过接口以某种方式实现这一点,但出于我的目的,传入的对象不需要实现接口,它只需要是具有宽度和高度属性的任何对象

这不起作用,因为您传入的对象需要实现接口:

Interface IWidthAndHeight{
    public var width : Float;
    public var height : Float;
}

Class Main{

    var o : IWidthAndHeight;

    public function setObject( o : IWidthAndHeight ){
        this.o = o;
    }

}
目前,我正在使用动态和手动检查属性是否存在,但有更智能的方法吗?现行方法:

Class Main{

    var o : Dynamic;

    public function setObject( o : Dynamic ){
        if (propertiesExist(o,['width','height'])){
            this.o = o;
        }
    }

    // Note: propertiesExist is my own method. Just assume it works :)
}

谢谢你的帮助。谢谢

您可以在此处使用:

这只是
varo:{width:Float,height:Float}的替代方案带有
typedef
setObject
参数中的任何类或结构都将在编译时检查这些字段,这称为

typedef WidthAndHeight = {
    width:Float,
    height:Float
}
class Main {
    var o:WidthAndHeight;
    public function setObject(o:WidthAndHeight) {
        this.o = o;
    }
}