diff --git a/src/evalfunc.c b/src/evalfunc.c
index e670381..d8c621d 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -957,6 +957,11 @@
     return &t_func_any;
 }
     static type_T *
+ret_func_unknown(int argcount UNUSED, type_T **argtypes UNUSED)
+{
+    return &t_func_unknown;
+}
+    static type_T *
 ret_channel(int argcount UNUSED, type_T **argtypes UNUSED)
 {
     return &t_channel;
@@ -1065,8 +1070,6 @@
     return &t_string;
 }
 
-static type_T *ret_f_function(int argcount, type_T **argtypes);
-
 /*
  * Array with names and number of arguments of all internal functions
  * MUST BE KEPT SORTED IN strcmp() ORDER FOR BINARY SEARCH!
@@ -1429,9 +1432,9 @@
     {"fullcommand",	1, 1, FEARG_1,	    arg1_string,
 			ret_string,	    f_fullcommand},
     {"funcref",		1, 3, FEARG_1,	    arg3_any_list_dict,
-			ret_func_any,	    f_funcref},
+			ret_func_unknown,   f_funcref},
     {"function",	1, 3, FEARG_1,	    arg3_any_list_dict,
-			ret_f_function,	    f_function},
+			ret_func_unknown,   f_function},
     {"garbagecollect",	0, 1, 0,	    arg1_bool,
 			ret_void,	    f_garbagecollect},
     {"get",		2, 3, FEARG_1,	    arg23_get,
@@ -4170,15 +4173,6 @@
     common_function(argvars, rettv, TRUE);
 }
 
-    static type_T *
-ret_f_function(int argcount, type_T **argtypes)
-{
-    if (argcount == 1 && argtypes[0]->tt_type == VAR_STRING)
-	return &t_func_any;
-    // Need to check the type at runtime, the function may be defined later.
-    return &t_func_unknown;
-}
-
 /*
  * "function()" function
  */
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index 16c3c88..58194ba 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -1258,7 +1258,7 @@
 enddef
 
 def Test_foldclosed()
-  CheckDefAndScriptFailure(['foldclosed(function("min"))'], ['E1013: Argument 1: type mismatch, expected string but got func(...): any', 'E1220: String or Number required for argument 1'])
+  CheckDefAndScriptFailure(['foldclosed(function("min"))'], ['E1013: Argument 1: type mismatch, expected string but got func(...): unknown', 'E1220: String or Number required for argument 1'])
   CheckDefExecAndScriptFailure(['foldclosed("")'], 'E1209: Invalid value for a line number')
   assert_equal(-1, foldclosed(1))
   assert_equal(-1, foldclosed('$'))
@@ -1312,11 +1312,69 @@
 def Test_funcref()
   CheckDefAndScriptFailure(['funcref("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2'])
   CheckDefAndScriptFailure(['funcref("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
+
+  var lines =<< trim END
+      vim9script
+      def UseBool(b: bool)
+      enddef
+      def GetRefOk()
+        var Ref1: func(bool) = funcref(UseBool)
+        var Ref2: func(bool) = funcref('UseBool')
+      enddef
+      def GetRefBad()
+        # only fails at runtime
+        var Ref1: func(number) = funcref(UseBool)
+      enddef
+      defcompile
+      GetRefOk()
+  END
+  CheckScriptSuccess(lines)
+
+  lines =<< trim END
+      vim9script
+      def UseBool(b: bool)
+      enddef
+      def GetRefBad()
+        # only fails at runtime
+        var Ref1: func(number) = funcref(UseBool)
+      enddef
+      GetRefBad()
+  END
+  CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(bool)')
 enddef
 
 def Test_function()
   CheckDefAndScriptFailure(['function("reverse", 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2'])
   CheckDefAndScriptFailure(['function("reverse", [2], [1])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required for argument 3'])
+
+  var lines =<< trim END
+      vim9script
+      def UseBool(b: bool)
+      enddef
+      def GetRefOk()
+        var Ref1: func(bool) = function(UseBool)
+        var Ref2: func(bool) = function('UseBool')
+      enddef
+      def GetRefBad()
+        # only fails at runtime
+        var Ref1: func(number) = function(UseBool)
+      enddef
+      defcompile
+      GetRefOk()
+  END
+  CheckScriptSuccess(lines)
+
+  lines =<< trim END
+      vim9script
+      def UseBool(b: bool)
+      enddef
+      def GetRefBad()
+        # only fails at runtime
+        var Ref1: func(number) = function(UseBool)
+      enddef
+      GetRefBad()
+  END
+  CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(number) but got func(bool)')
 enddef
 
 def Test_garbagecollect()
diff --git a/src/version.c b/src/version.c
index 95bcb39..b3121d1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3857,
+/**/
     3856,
 /**/
     3855,
