Skip to content

类型系统

这页讲的是如何理解 Targo 的类型系统,而不是完整列举所有支持细节。

最重要的心智模型只有一句:

Targo 用 TypeScript 风格语法表达 Go-first 的类型系统。

先抓住这几个变化

1. 类型不是“看起来像 TS 就一定按 TS 工作”

  • number 虽然支持,但默认映射到 float64
  • 很多边界场景仍然更适合显式写 intint64uint32float64
  • 条件表达式应当是明确的 bool,不要依赖 JS 的 truthy/falsy 习惯

2. 数据类型要按 Go 习惯选

  • 面向 Go-native 逻辑时优先考虑 slice<T>map<K, V>Fixed<T, N>
  • 只有在明确需要 JS 风格集合方法时,才优先选 Array<T>

3. class 不是 JS 继承体系

  • class 更接近 Go struct 的使用方式
  • constructor 支持,但设计上仍然优先组合而不是继承
  • 私有字段使用 #field

4. nullability 和字符串语义需要重新确认

  • null / undefined?.?? 这些能力存在,但不要自动假设语义和 JS 所有细节完全一样
  • 字符串 .length 更接近 Go len,涉及 Unicode 时要重新检查预期

实践建议

数值类型

  • 默认业务整数优先考虑 int
  • 与协议、索引、字节、Go API 边界交互时显式使用具体数值类型
  • 如果你只是从 TS 迁移过来,不要因为“有 number”就把所有数值都继续写成 number

值与引用

  • 原始类型按值使用
  • class 默认按引用思维去理解
  • 当代码依赖“复制后互不影响”时,显式确认你拿到的是值还是引用

零值与默认值

  • 泛型场景可以用 zero<T>()
  • 非泛型场景优先用更直白的字面量或构造方式

什么时候跳去 Reference

如果你的问题是下面这些,就不要继续在 guide 里找:

  • number 现在到底支持到什么程度?
  • Array<T> / T[]slice<T> 具体支持边界是什么?
  • ?. / ?? 是否可用?
  • 哪些 JS 熟悉 API 目前支持?

看这里: