Why can’t automatic type conversion happen here?
typedef PluginSpec = {
final name:String;
final ?cmd:String;
final ?event:String;
}
abstract Plugin(PluginSpec) {
@:from
public static inline function from(spec:PluginSpec):Plugin {
return untyped __lua__("{{0}, cmd = {1}, event = {2}, config = {3}}", spec.name, spec.cmd, spec.event, spec.config);
};
}
typedef Plugins = lua.Table.Table<Int, Plugin>;
extern class Packer {
inline static function init(plugins:Plugins):Void { ... }
}
When I try to use it like this:
import lua.Table.create as t;
function main() {
Packer.init(t([{name: "wbthomason/packer.nvim", cmd: "", event: ""}]));
or this
import lua.Table.create as t;
function main() {
final plugins:Plugins = t([{name: "wbthomason/packer.nvim", cmd: "", event: ""}]);
Packer.init(plugins);
It says the types do not align.
src/kickstart/Pure.hx:7: characters 2-84 : error: { name : String, event : String, cmd : String } should be plugins.Plugin
src/kickstart/Pure.hx:7: characters 2-84 : ... have: lua.Table<..., { name, event, cmd }>
src/kickstart/Pure.hx:7: characters 2-84 : ... want: plugins.Plugins<>