类型系统
这页讲的是如何理解 Targo 的类型系统,而不是完整列举所有支持细节。
最重要的心智模型只有一句:
Targo 用 TypeScript 风格语法表达 Go-first 的类型系统。
先抓住这几个变化
1. 类型不是“看起来像 TS 就一定按 TS 工作”
number虽然支持,但默认映射到float64- 很多边界场景仍然更适合显式写
int、int64、uint32、float64 - 条件表达式应当是明确的
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更接近 Golen,涉及 Unicode 时要重新检查预期
实践建议
数值类型
- 默认业务整数优先考虑
int - 与协议、索引、字节、Go API 边界交互时显式使用具体数值类型
- 如果你只是从 TS 迁移过来,不要因为“有
number”就把所有数值都继续写成number
值与引用
- 原始类型按值使用
class默认按引用思维去理解- 当代码依赖“复制后互不影响”时,显式确认你拿到的是值还是引用
零值与默认值
- 泛型场景可以用
zero<T>() - 非泛型场景优先用更直白的字面量或构造方式
什么时候跳去 Reference
如果你的问题是下面这些,就不要继续在 guide 里找:
number现在到底支持到什么程度?Array<T>/T[]和slice<T>具体支持边界是什么??./??是否可用?- 哪些 JS 熟悉 API 目前支持?
看这里: