# 类型 ## 功能 BT 是动态类型语言,变量本身不固定类型,值在运行时携带类型。可以使用 `type(value)` 查看脚本可见类型名。 ## 语法 ```bt type(value) ``` ## 内置基础类型 | 类型 | 说明 | | ------ | ------ | | `Int` | 整数。 | | `Float` | 浮点数。 | | `Bool` | 布尔值。 | | `String` | 字符串。 | | `Array` | 数组。 | | `Object` | 对象。 | | `Null` | 显式空值或失败值。 | | `Empty` | 缺失值。 | | `Regex` | 正则表达式。 | | `Fn` | 函数。 | | `Class` | 类。 | | `Instance` | 类实例。 | ## 标准库对象类型 | 类型 | 说明 | | ------ | ------ | | `Fs` | 文件系统对象。 | | `Date` | 日期时间对象。 | | `Math` | 全局数学对象。 | | `Base64` | Base64 编解码对象。 | | `Mysql` | MySQL 构建器对象。 | | `Reqwest` | HTTP 请求构建器对象。 | | `Process` | 进程构建器或子进程对象。 | | `Net` | 网络服务或连接对象。 | | `Device` | 设备通信对象。 | ## 扩展对象类型 扩展对象的 `type()` 返回 `bindings.json` 中 `objects[].name` 声明的对象类型名。扩展对象的内部身份仍由宿主使用模块 ID、类型 ID 和对象 ID 管理,脚本层只看到可读、可比较的类型名。 ```bt db = sqlite('@/data/demo.db', {}) query = db.query('SELECT 1') // 输出:Sqlite print type(db) // 输出:SqliteQuery print type(query) ``` ## 代码示例 ```bt // 输出:Int println type(123) // 输出:String println type('BT') // 输出:Array println type([1, 2, 3]) // 输出:Object println type({name: 'BT'}) ``` ## 类型转换 ```bt int('12') float('12.5') string(123) bool(1) array('abc') object('{"name":"BT"}') ``` ## 注意事项 - `empty` 表示缺失值:表达式无产出、变量未初始化、字段或下标不存在、函数参数未传入。 - `null` 表示显式空值或失败值:用户写入的 `null`、JSON null、数据库 NULL、解析或转换失败。 - `json(empty)` 或包含 `empty` 的数组、对象序列化为 JSON 时会输出标准 JSON `null`。 - 扩展对象返回具体对象类型名,例如 `Calc`、`Sqlite`、`SqliteQuery`,不再返回统一的 `ExtObject`。