Types 如何正确处理bucklescript中原始js函数调用的结果类型
Bucklescript允许定义原始js函数调用,但我不清楚应该如何处理返回类型。似乎可以使用任何类型,它仍然可以工作。例如,此代码编译和运行时不会出现问题:Types 如何正确处理bucklescript中原始js函数调用的结果类型,types,ocaml,ffi,bucklescript,Types,Ocaml,Ffi,Bucklescript,Bucklescript允许定义原始js函数调用,但我不清楚应该如何处理返回类型。似乎可以使用任何类型,它仍然可以工作。例如,此代码编译和运行时不会出现问题: let f = [%raw {| function() { return 4; } |}] let x : (string option) list = f () 编译器不会抱怨x具有类型(字符串选项)列表或任何其他伪造类型。通常,我只依赖类型推断,但我想将原始js函数调用的结果分配给结构中的字段,因此我必须在结构类型
let f = [%raw {|
function() {
return 4;
}
|}]
let x : (string option) list = f ()
编译器不会抱怨x具有类型<代码>(字符串选项)列表或任何其他伪造类型。通常,我只依赖类型推断,但我想将原始js函数调用的结果分配给结构中的字段,因此我必须在结构类型定义中为该字段定义类型。似乎我也可以使用任何类型,它仍然会工作。这是预期的行为吗?是否有处理这些情况的建议?是的,这是预期行为。编译器不试图理解
raw
块的内容,这使得它们在一般情况下使用起来非常危险。如果出现语法错误,编译器不会抱怨
类型推断算法总是试图推断出最一般的类型,如果没有任何提示,则将。。。任何东西它甚至没有假设它是一个函数,因为它不一定是
%raw
是一个可以像任何其他表达式一样使用类型进行注释的表达式。魔法发生在它的内部,而不是外部。您可以直接为表达式指定类型:
let f = ([%raw {|
function() {
return 4;
}
|}] : unit -> int)
或者在绑定上,就像您使用x
:
let f : unit -> int = [%raw {|
function() {
return 4;
}
|}]
看见