ObjectOS
參考

欄位型別

你可以在物件上宣告的所有欄位型別 —— 儲存什麼、接受哪些選項、在 REST、Console 和 AI Builder 中如何呈現。

48 個內建欄位型別,按家族分組。完整的 Zod schema 在 packages/spec/src/data/field.zod.ts —— 本頁為工作摘要。

核心屬性(每個欄位都有)

屬性型別預設值用途
namestring (snake_case)機器識別符號 —— REST 路徑段、SQL 列
labelstringConsole 中的顯示標籤
typeFieldType見下方型別表
requiredbooleanfalseNOT NULL 約束
uniquebooleanfalse唯一索引
searchablebooleanfalse/api/v1/search 建索引
multiplebooleanfalse儲存值的陣列
defaultValueunknown初始值(字面量或 CEL)
hiddenbooleanfalse在預設 Console 檢視中隱藏
readonlybooleanfalse表單中停用
systembooleanfalse自動注入(id、created_at……)
externalIdbooleanfalse可用作外部鍵 upsert
inlineHelpTextstring提示/幫助文本
conditionalRequiredP 謂詞CEL 為真時必填
trackHistorybooleanfalse將值變更渲染為記錄活動時間線上可讀的條目(ADR-0052)

16.0 中已移除:columnName(物理列始終等於欄位名;外部/聯邦物件通過 external.columnMap 對映列)以及欄位級 index 布林值(請在物件的 indexes[] 陣列中宣告索引)。

文本家族

型別用途關鍵選項
text短字串maxLengthminLength
textarea多行maxLength
email郵箱格式校驗;小寫化
urlURL格式校驗
phone電話E.164
password單向金鑰由 auth 子系統雜湊;GET 永不返回
secret可逆金鑰(API key、token、資料庫密碼)通過加密提供方在靜態時加密,存為不透明引用,讀取時脫敏。Fail-closed —— 未配置提供方時,寫入會拋錯而非以明文持久化
markdownmarkdown 正文在 Console 預覽中渲染
html清洗後的 HTML寫入時經 DOMPurify
richtext所見即所得Console 編輯器 + 序列化 JSON

數字

型別用途關鍵選項
number浮點minmaxprecisionscale
currency貨幣currencyConfig: { precision, currencyMode: 'fixed' | 'dynamic', defaultCurrency }
percent0–100 %minmaxscale

integerdecimal 不是獨立型別 —— 整數用 numberscale: 0,定點小數用 precision+scale

日期/時間

型別儲存說明
date日曆日期無時區
datetime瞬時UTC
time時鐘時間無日期

邏輯

型別說明
boolean核取方塊
toggle等同 boolean,開關 UI

選擇

型別說明
select單選 —— 內聯宣告選項或引用 picklist
multiselect多選,以陣列儲存
radio以單選按鈕渲染的 select UI 別名
checkboxes以核取方塊渲染的 multiselect UI 別名

選項形狀:

options: [
  { value: 'low',    label: 'Low' },
  { value: 'high',   label: 'High',   color: '#e02' },
  { value: 'urgent', label: 'Urgent', color: '#c00' }
]

關係

型別基數語義
lookup多對一松引用;刪除父記錄預設不會刪除子記錄
master_detail多對一,級聯子記錄不能脫離父記錄;許可權從父繼承
tree自引用層級(同一物件上的 parent_id)

常用選項:

{
  type: 'lookup',
  reference: 'account',                       // 目标对象名
  lookupFilters: [                            // 收窄查找选择器
    { field: 'status', operator: 'eq', value: 'active' }
  ],
  deleteBehavior: 'set_null'                  // 'set_null' | 'cascade' | 'restrict'
}

舊的字串陣列 referenceFilters 已在 16.0 移除——記錄選擇器只識別結構化的 lookupFilters 形式。支援的 operator 取值:eqnegtltgteltecontainsinnotIn

計算

型別作用關鍵選項
formula派生值,讀取或重新計算時求值expression: F\record.qty * record.unit_price`` —— 見 CEL
summary子關係上的彙總summaryOperations: { object, field, function, filter? }count | sum | avg | min | max;可選 filter —— 查詢 where 條件,如 { status: 'received' } —— 僅聚合匹配的子行,16.0+)
autonumber自動遞增顯示編號format(如 TKT-{0000})、startAt

公式示例:

{
  name: 'profit_margin',
  type: 'formula',
  expression: F`(record.revenue - record.cost) / record.revenue * 100`
}

媒體

型別用途關鍵選項
image影像附件multiple / accept / maxSize(見下)
file任意檔案
avatar頭像方形裁剪,合理預設
video影片上傳時長 + 縮圖捕獲
audio音訊波形預覽
{
  type: 'file',
  multiple: true,                             // 存储附件数组
  accept: ['image/png', 'image/jpeg'],        // MIME 类型 / 扩展名
  maxSize: 10_000_000                         // 字节
}

巢狀的 fileAttachmentConfig 物件已在 16.0 移除——執行時從未讀取過它。 請使用扁平的 multiple / accept / maxSize 屬性。儲存按部署配置 (見 Configure → Storage),而非按欄位配置。

結構化

型別儲存說明
json任意 JSONPostgres 上存為 JSONB
composite帶命名欄位的子記錄內聯結構,非獨立表
repeatercomposite 值陣列無子物件的一對多

增強 UI

型別說明
location經緯度 + 精度
address街/市/區/郵編/國家
code原始碼欄位 —— languagethemelineNumbers
colorcolorFormat: 'hex' | 'rgb' | 'rgba' | 'hsl'presetColors[]
rating1–N 星 —— maxicon
slider帶滑塊 UI 的有界數字
signature手繪簽名,存為影像
qrcode將值渲染為 QR 或條形碼(EAN / UPC / Code128)
progress派生百分比,以進度條渲染
tags帶自動完成的自由標籤陣列
vector嵌入列 —— 扁平的 dimensions(如 OpenAI 嵌入為 1536);巢狀的 vectorConfigdistanceMetric/indexed/indexType)已在 16.0 移除

系統欄位(每個物件自動注入)

欄位型別說明
idtext (ULID)主鍵
created_atdatetimeUTC 插入時間
updated_atdatetimeUTC 最後寫入時間
created_bylookup → user誰插入
updated_bylookup → user誰最後寫入
versioninteger樂觀併發 token

你不宣告它們 —— 通過 ObjectSpec.systemFields: false 按物件退出(很少是好主意)。

欄位如何流經技術棧

*.object.ts (field spec)

   ├─► Postgres / MySQL / SQLite column + index + constraint
   ├─► REST: validated on POST/PATCH, exposed on GET
   ├─► Console: form widget + list column
   ├─► AI Builder: tool argument schema (so the AI knows what to ask)
   └─► Audit: change-tracked if `trackHistory: true`

參見

On this page