You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动