Godot/GDScript中动态类类型校验报错问题求助
解决动态类型校验的报错问题
你遇到的核心问题是:在静态类型系统中(比如TypeScript或开启静态检查的Godot),is关键字仅支持编译时确定的类型,而check_type是运行时动态获取的变量,编译器无法将其识别为合法类型,因此抛出报错。
以下是针对不同场景的替代解决方案:
场景1:TypeScript环境下检查构造函数匹配
如果get_type_restriction()返回的是类的构造函数,直接用instanceof替代is即可:
const checkType = getTypeRestriction(); if (thingToCheck instanceof checkType) { doSomething(); }
注意:instanceof依赖原型链,若存在跨iframe或原型被修改的情况,可能出现校验失效。
场景2:通过类型名称字符串校验
如果只需要对比类型的标识名称,可以通过构造函数名称或自定义类型标记实现:
// 方案A:使用构造函数名称 const checkTypeName = getTypeRestriction(); if (thingToCheck.constructor.name === checkTypeName) { doSomething(); } // 方案B:自定义类型标记(更可靠,避免构造函数名称被混淆) // 假设每个需要校验的对象都声明了type属性 interface TypedObject { type: string; } const checkTypeName = getTypeRestriction(); if ((thingToCheck as TypedObject).type === checkTypeName) { doSomething(); }
场景3:Godot引擎环境下
如果是在Godot中使用GDScript(你提到了Script类型提示),可以用引擎内置的类型检查方法:
var check_type = get_type_restriction() # 检查对象是否属于指定类或其子类 if thing_to_check.is_class(check_type): do_something() # 或者严格匹配类名(不包含子类) if thing_to_check.get_class() == check_type: do_something()
内容的提问来源于stack exchange,提问作者tb189




