### Godot version

4.0.1

### System information

Windows 11, Vulkan, ryzen 9 5900X, rx 6700xt

### Issue description

When creating a typed array
(take `var wheels: Array[VehicleWheel3D]` as an example)

and then trying to add a node to the array by referencing it with `$`
(for example `var wheels: Array[VehicleWheel3D] = [$BackLeftWheel]`)

it will return the following error:
_Cannot have an element of type "Node" in an array of type "Array[VehicleWheel3D]"_

I have a theory that this is due to `$MyNode` being the same as `get_node("MyNode")` for the parser and `get_node()` has a return type of `Node`, so the parser thinks that you are trying to append a `Node` to the array (Haven't checked that in the source code, it's just a theory). 

![image](https://user-images.githubusercontent.com/111653551/227974121-e0be38bc-8c99-47f1-adf6-775083805cff.png)

This can be worked around by casting the node as the intended type
(`var wheels: Array[VehicleWheel3D] = [$BackLeftWheel as VehicleWheel3D]`)

### Steps to reproduce

See "Issue description" and "Minimal reproduction project"

### Minimal reproduction project


[Typed Array issue rep project.zip](https://github.com/godotengine/godot/files/11080146/Typed.Array.issue.rep.project.zip)

break;
		}
		GDScriptParser::DataType par_type = p_par_types[i];
		if (par_type.is_hard_type() && p_call->arguments[i]->is_constant) {
			update_const_expression_builtin_type(p_call->arguments[i], par_type, "pass");
		}
		GDScriptParser::DataType arg_type = p_call->arguments[i]->get_datatype();
		if (arg_type.is_variant() || !arg_type.is_hard_type()) {
			
			if (!(par_type.is_hard_type() && par_type.is_variant())) {
				mark_node_unsafe(p_call->arguments[i]);
			}
		} else if (par_type.is_hard_type() && !is_type_compatible(par_type, arg_type, true)) {
			
			mark_node_unsafe(p_call);
			if (!is_type_compatible(arg_type, par_type)) {
				push_error(vformat(R"*(Invalid argument for "%s()" function: argument %d should be "%s" but is "%s".)*",
								   p_call->function_name, i + 1, par_type.to_string(), arg_type.to_string()),
						p_call->arguments[i]);
			}
#ifdef DEBUG_ENABLED
		} else if (par_type.kind == GDScriptParser::DataType::BUILTIN && par_type.builtin_type == Variant::INT && arg_type.kind == GDScriptParser::DataType::BUILTIN && arg_type.builtin_type == Variant::FLOAT) {
			parser->push_warning(p_call, GDScriptWarning::NARROWING_CONVERSION, p_call->function_name);
#endif
		}
	}
}
#ifdef DEBUG_ENABLED
void GDScriptAnalyzer::is_shadowing(GDScriptParser::IdentifierNode *p_local, const String &p_context) {