用途:为使用 TypeScript 编写、经 roblox-ts 编译为 Luau 的 Roblox 项目提供开发工作流。其构建管线、包生态与互操作面不同于纯 Luau;基于 roblox-ts 的框架层(如 Flamework)不在范围内。
主要能力与构建管线:标准流程为 .ts 源码 → rbxtsc(roblox-ts 编译器)→ out/ 下的 .lua → rojo serve/rojo build → Studio。编译器为 npm 包 roblox-ts,二进制名 rbxtsc;类型来自 @rbxts/types,随 Roblox API 自动发布;配置为面向 roblox-ts 的 tsconfig.json。Rojo 把编译产物 out/ 映射进 place 文件,因此 default.project.json 指向编译输出而非 .ts 源码。应编辑 .ts 源码,out/ 是构建产物,仅在用户明确说明的紧急情况下才修补。
项目识别:package.json scripts 中有 rbxtsc、tsconfig.json 含 roblox-ts 设置、存在 @rbxts/* 包、以及被 default.project.json 映射的 out/ 目录。
TS 到 Luau 互操作:Roblox Instance 为 1 索引,通过 @rbxts/types 成员读取;多返回值用 LuaTuple<[A, B]> 而非数组;当生成代码依赖 self/this 时保留 Luau 冒号调用语义;import 映射到编译后 out/ 树的 Rojo Instance 路径,而非 .ts 文件系统路径。
UI:React-lua 与 Fusion 有 TypeScript 绑定,可用组件生成 Instance。@rbxts/react 配 @rbxts/react-roblox,JSX 经 compilerOptions.jsxFactory: "React.createElement" 与 jsxFragmentFactory: "React.Fragment" 编译;@rbxts/fusion 做响应式状态驱动 UI,@rbxts/ripple 做弹簧动画,@rbxts/pretty-react-hooks 提供共享 hooks。组件源码位于 Rojo 映射的源码树,Studio 挂载的是 out/ 中生成的 Luau,新 UI 模块需有对应 Rojo 路径。
服务端/客户端边界:Roblox 权威模型不变,权威状态与校验在服务端,客户端负责输入、显示、预测与请求,Remote 参数需做类型与权限检查,DataStore 写入需限流、重试与失败处理。
常见陷阱:手改 out/ 文件会在下次构建时消失;import 路径与 Rojo 树不匹配会 require 错误 Instance;对 Roblox API 做数组式假设会出错(1 索引且可多返回值);用字符串查找服务会丢失类型,应从 @rbxts/services 导入;Rojo 服务时构建过期会让 Studio 停留在旧行为。
验证:优先运行项目自身脚本,如 npm run build、npx rbxtsc、rojo sourcemap、selene、stylua,并区分已在 Studio 执行、静态检查、已准备未运行、未验证四种证据等级。输出应说明改动的 .ts 文件与行为、生成的 Luau、服务端/客户端边界、Remote/DataStore 风险及实际执行的验证。相关技能:roblox-luau-developer、roblox-ui-developer。