patch 8.2.4311: Vim9: changing script variable type not caught compile time

Problem:    Vim9: changing script variable type not caught at compile time.
Solution:   Set the declared type.
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 79c08d3..7d3e2c1 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -692,6 +692,16 @@
   END
   v9.CheckDefExecAndScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>', 4)
   unlet g:myList
+
+  lines =<< trim END
+      vim9script
+      var lds = [1, 2, 3]
+      def Func()
+          echo lds->extend(['x'])
+      enddef
+      defcompile
+  END
+  v9.CheckScriptFailure(lines, 'E1013:')
 enddef
 
 def Test_extend_dict()
diff --git a/src/version.c b/src/version.c
index 20bc28a..2342462 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4311,
+/**/
     4310,
 /**/
     4309,
diff --git a/src/vim9instr.c b/src/vim9instr.c
index cf26650..9116f41 100644
--- a/src/vim9instr.c
+++ b/src/vim9instr.c
@@ -1040,7 +1040,7 @@
 
     RETURN_OK_IF_SKIP(cctx);
     if (isn_type == ISN_LOADSCRIPT)
-	isn = generate_instr_type(cctx, isn_type, type);
+	isn = generate_instr_type2(cctx, isn_type, type, type);
     else
 	isn = generate_instr_drop(cctx, isn_type, 1);
     if (isn == NULL)