typeof
2026/4/15大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — typeof
typeof
定义
typeof() 传入任意一个值,返回这个值的类型编号。每个编号对应一种数据类型(比如整数、字符串、数组等)。
就像快递分拣中心给每个包裹贴上类型标签——"易碎品""液体""电子产品"——每个标签有一个编号。typeof() 就是读取这个编号:你给它一个值,它告诉你是哪种类型。拿到编号后,你可以对照类型表查出具体是什么类型。
函数签名
C#
// C# 中没有直接的 typeof() 全局函数
// 可以通过 GodotObject 的 Variant 类型系统获取
// 方式一:使用 Variant.Type 枚举判断
// variantValue.VariantType 返回 Variant.Type 枚举值
// 方式二:使用 is 关键字进行类型匹配(推荐)
// if (value is int intValue) { ... }GDScript
func typeof(variable: Variant) -> int参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
variable | Variant | 是 | 要检测类型的任意值。GDScript 中所有值都可以传入 |
返回值
int —— 一个整数编号,对应值的 Variant 类型。常见编号如下:
| 编号 | 常量名 | 类型 | 举例 |
|---|---|---|---|
| 0 | TYPE_NIL | 空(null) | null |
| 1 | TYPE_BOOL | 布尔值 | true, false |
| 2 | TYPE_INT | 整数 | 42 |
| 3 | TYPE_FLOAT | 浮点数 | 3.14 |
| 4 | TYPE_STRING | 字符串 | "hello" |
| 5 | TYPE_VECTOR2 | 二维向量 | Vector2(1, 2) |
| 7 | TYPE_VECTOR3 | 三维向量 | Vector3(1, 2, 3) |
| 11 | TYPE_COLOR | 颜色 | Color.RED |
| 15 | TYPE_ARRAY | 数组 | [1, 2, 3] |
| 17 | TYPE_DICTIONARY | 字典 | {"key": "value"} |
| 24 | TYPE_OBJECT | 对象 | 节点实例等 |
以上仅列出常用类型,完整列表请参考 Godot 官方文档中的 Variant.Type 枚举。
代码示例
C#
using Godot;
using System;
using System.Collections;
public partial class TypeofExample : Node
{
public override void _Ready()
{
// C# 推荐使用 is 关键字进行类型判断
object _value = 42;
if (_value is int)
GD.Print("这是一个整数");
else if (_value is float)
GD.Print("这是一个浮点数");
else if (_value is string)
GD.Print("这是一个字符串");
else if (_value is bool)
GD.Print("这是一个布尔值");
// 如果需要获取 Variant.Type(与 GDScript 的 typeof 对应)
// 可以通过 Variant.From() 转换后获取
var variant = Variant.From(42);
GD.Print($"42 的 Variant 类型: {variant.VariantType}");
// 输出: 42 的 Variant 类型: Int
// 批量检测不同类型
CheckType(42); // 整数
CheckType(3.14); // 浮点数
CheckType("hello"); // 字符串
CheckType(true); // 布尔值
CheckType(new Vector2(1, 2)); // 二维向量
}
private void CheckType(Variant value)
{
GD.Print($"值 {value} 的类型: {value.VariantType}");
}
}GDScript
extends Node
func _ready():
# 基本用法:查看不同值的类型编号
print(typeof(null)) # 0 (TYPE_NIL)
print(typeof(true)) # 1 (TYPE_BOOL)
print(typeof(42)) # 2 (TYPE_INT)
print(typeof(3.14)) # 3 (TYPE_FLOAT)
print(typeof("hello")) # 4 (TYPE_STRING)
# 用常量名来判断类型,比硬编码数字更易读
var _value = "你好世界"
if typeof(_value) == TYPE_STRING:
print("这是一个字符串")
# 批量检测不同类型的值
var _items = [42, 3.14, "hello", true, Vector2(1, 2), [1, 2, 3]]
for _item in _items:
print("值: %s, 类型编号: %d" % [_item, typeof(_item)])
# 实际场景:根据类型做不同处理
CheckAndPrint(42)
CheckAndPrint("Godot")
CheckAndPrint([1, 2, 3])
func CheckAndPrint(_value):
var _typeNumber = typeof(_value)
match _typeNumber:
TYPE_INT:
print("整数: %d" % _value)
TYPE_STRING:
print("字符串: %s" % _value)
TYPE_ARRAY:
print("数组,元素个数: %d" % _value.size())
_:
print("其他类型,编号: %d" % _typeNumber)注意事项
typeof()是 GDScript 特有的函数,C# 中没有直接等价物。C# 推荐使用is关键字或Variant.VariantType属性来进行类型判断。- 在 GDScript 中,尽量使用类型常量(如
TYPE_INT、TYPE_STRING)而不是硬编码数字(如2、4),这样代码更易读,也不会因为引擎更新导致编号变化而出现问题。 typeof()返回的是运行时的实际类型,而不是变量的声明类型。例如,一个声明为Variant的变量如果存储了整数42,typeof()会返回TYPE_INT(2),而不是"Variant"。typeof(null)返回TYPE_NIL(0),这在检查一个变量是否为空时非常有用。- 在 C# 中,Godot 的
Variant.Type枚举值与 GDScript 中typeof()返回的整数编号是一一对应的。
