Targo 速查表
Targo 使用 TypeScript 风格语法,但语义是 Go-first。把它当成一个用 TS 表面语法表达的 Go 风格语言,而不是"换了编译器的 JavaScript"。
心智模型
src/是源码,dist/和tsconfig.targo.json是生成产物types/和.targo/是声明输出,不要手动编辑- 以当前 Targo 行为为准,不要按纯 TypeScript 预期来判断
- 如果一个写法"看起来是合法 TS 但不太像 Go",先验证再使用
支持矩阵
核心类型
| 特性 | 状态 | 说明 |
|---|---|---|
number | 支持 | 映射到 float64 |
| 显式 Go 数值类型 | 支持 | int、int64、uint32、float64 等,API 边界优先使用 |
bool | 支持 | 条件必须是显式 bool |
string | 支持 | .length 遵循 Go len(字节长度) |
byte / rune | 支持 | Go 字符类型 |
bigint | 支持 | 映射到 *big.Int,不可变语义 |
null / undefined | 支持 | Targo 可空模型的一部分 |
?. / ?? | 支持 | 可选链和空值合并 |
结构体与类型
| 特性 | 状态 | 说明 |
|---|---|---|
class | 支持 | Go struct,引用语义 |
constructor | 支持 | 受 checker 约束 |
extends 继承 | 不支持 | 优先使用组合 |
interface | 支持 | Go 风格契约 |
GoInterface | 支持 | Go interface 边界标记 |
Embedding<{ ... }>() | 支持 | 结构体嵌入模式 |
DefinedType<...>() | 支持 | Go defined type |
#private 字段 | 支持 | 使用此形式 |
private / protected 关键字 | 不支持 | 使用 #field |
| Struct tags | 支持 | 通过 @json / @tag JSDoc 注释 |
集合
| 特性 | 状态 | 说明 |
|---|---|---|
slice<T> | 支持 | Go-native 动态集合 |
Array<T> / T[] | 支持 | Runtime-backed 集合,带 JS 风格方法 |
map<K, V> | 支持 | Go map 语义 |
Map<K, V> | 支持 | Runtime-backed 有序 map,带 JS 风格方法 |
Set<T> | 支持 | Runtime-backed 有序 set |
Fixed<T, N> | 支持 | 固定大小 Go 数组 |
chan<T> | 支持 | Channel 通信 |
函数与控制流
| 特性 | 状态 | 说明 |
|---|---|---|
| Tuple 多返回值 | 支持 | [T, error | null] 模式 |
error | null | 支持 | 首选错误模型 |
panic() / recover() | 支持 | 谨慎使用 |
defer | 支持 | Go 风格延迟执行 |
async/await | 不支持 | 使用 Go 并发原语 |
Promise | 不支持 | 无 JS 异步运行时 |
go(() => {}) | 支持 | 启动 goroutine |
chan<T> | 支持 | Channel 通信 |
switch (chan.$select) | 支持 | Select 风格协调 |
工具链与互操作
| 特性 | 状态 | 说明 |
|---|---|---|
| 直接导入 Go 包 | 支持 | 变更后需刷新声明 |
targo init | 支持 | 刷新声明和项目状态 |
targo test | 支持 | 使用 Go 测试运行器 |
testing.T / testing.B | 支持 | 标准测试和基准签名 |
/** @go:* */ 指令 | 支持 | 基于 JSDoc 的 Go 指令 |
迁移快速规则
- 用显式错误返回替代异常驱动的 API
- Go-native 代码优先用
slice<T>;需要 runtime 集合方法时用Array<T> - Unicode 相关场景重新检查字符串索引假设
- 变更依赖、导入或 Targo 配置后运行
npm run targo init - 在 Go 风格和 JavaScript 风格之间,优先选 Go 风格