中文对照表
85 个关键字做进 TypeScript 7(Go 版)的扫描器。中文是并列多出来的一种拼写,不是替换。
本表由
tsc/cmd/genzhkeywords从编译器真正在用的那张表 (tsc/internal/scanner/zh_keywords.txt)自动生成,不是手写的 —— 手写的副本一定会和编译器漂移。生成器同时产出
tsc/internal/scanner/zh_keywords_generated.go;go run ./cmd/genzhkeywords -check会核对两份产物是否都与词表一致, 而tests-chts/judge_chts.ps1第①项每次判定都在跑它 —— 也就是说「词表改了忘了重新生成」会被机器抓出来,不靠人记得。
中英两种写法都可以用,而且可以混着写。 中文不是替换英文,是并列多出来的一种拼写。
一、关键字(85 个)
| 中文 | 英文 | 中文 | 英文 |
|---|---|---|---|
抽象 | abstract | 是类型 | is |
访问器 | accessor | 取键 | keyof |
任意 | any | 局部变量 | let |
作为 | as | 模块 | module |
断言 | assert | 名域 | namespace |
断言式 | asserts | 永不 | never |
异步 | async | 新建 | new |
等待 | await | 空值 | null |
大整数 | bigint | 数字 | number |
布尔 | boolean | 对象 | object |
跳出 | break | 遍历 | of |
情形 | case | 输出 | out |
捕获 | catch | 重写 | override |
类型 | class | 软件包 | package |
常量 | const | 私有 | private |
构造器 | constructor | 受保护 | protected |
跳过 | continue | 公开 | public |
调试器 | debugger | 只读 | readonly |
声明 | declare | 需要 | require |
默认 | default | 返回 | return |
推迟 | defer | 满足 | satisfies |
删除 | delete | 设值 | set |
执行 | do | 静态 | static |
否则 | else | 字符串 | string |
枚举 | enum | 父类 | super |
导出 | export | 选择 | switch |
继承 | extends | 符号 | symbol |
假值 | false | 自身 | this |
最终 | finally | 抛出 | throw |
对于 | for | 真值 | true |
来自 | from | 尝试 | try |
函数 | function | 类型别名 | type |
取值 | get | 取类型 | typeof |
全局 | global | 未定义 | undefined |
如果 | if | 唯一 | unique |
立即 | immediate | 未知 | unknown |
实现 | implements | 使用 | using |
导入 | import | 变量 | var |
属于 | in | 空型 | void |
推断 | infer | 每当 | while |
是实例 | instanceof | 伴随 | with |
接口 | interface | 产出 | yield |
内建 | intrinsic |
二、译名定则
- 2–6 个汉字(按汉字算,不按字节算)。实测分布:2 字 71 条、3 字 12 条、4 字 2 条。
- 最长:
局部变量(let 的译名),4 个汉字 / 12 字节。 - 唯一:一词一译;没有两个汉语拼写指向同一个关键字。
- 与 Chinese++ 同词同义:英文词相同者复用 Chinese++ 的既定译名 (
if→如果、else→否则、class→类型、break→跳出、namespace→名域 …), 使同一份汉语词汇在两个产品线里含义一致。Chinese++ 的表在它的packaging\中文对照表.md。 - ⚠ 一处故意不同:TypeScript 里
class与type并存, 故class→类型(沿用 Chinese++「class 必须译作类型」的定例)、type→类型别名。
三、这些仍然必须写英文
| 东西 | 例子 | 为什么 |
|---|---|---|
| 库 / 框架 / JS 内建的名字与成员 | console.log、Array.from、JSON.parse | 它们是别人的标识符(JS 内建、npm 包、DOM),不是关键字 |
| 类型工具名 | Partial<T>、Record<K, V>、Promise<T> | 同上,来自 lib.*.d.ts |
| 字符串里的东西 | 导入 { 平方 } 来自 "./数学" | 路径与包名是运行时要解析的字符串,翻译了就找不到文件 |
| 属性名 | 对象.名字、甲["对象"] | 属性名位允许任何标识符(包括关键字)—— 见第五节 |
| 命令行开关 | --target es2020、--strict | 构建系统靠它 |
--help 的输出 | —— | 已汉化:命令行默认 --locale zh-CN;要英文用 --locale en |
⚠ 与 Chinese++ 的一处重大差别:Chinese++ 连标准库都做了汉化层 (中文头名覆盖 103/103,
#包含 <向量>可用)。ChineseTypeScript 没有做 「汉语标准库」——console、Array、Promise这些名字没有中文别名。 这是如实登记的一条,见README-我们的说明.md的「已知局限」。
四、必须知道的副作用:这 85 个词成了保留字
汉语关键字在所有文件里都生效(不限于 .ts)。因此:
常量 对象 = 1; // ✗ 编不过:对象 是 object 的译名,占了标识符位
常量 我的对象 = 1; // ✓ 不是关键字,照旧可用对象 / 变量 / 函数 / 类型 这类词不能再当标识符用。 英文关键字永远可写(const obj = 1),这是逃生通道。
之所以选「全局生效」而不是「仅 .ts 生效」:改一处即可覆盖整条链, 且实测上游官方 conformance 语料 5894 个真实 .ts/.tsx 零回归 (tests-chts/judge_oss.ps1 -Sample 0)。取舍写在 README 的「已知局限」第 1 条。
五、关键字当属性名仍然合法(边界在哪)
保留的是标识符位置,不是属性名位置:
常量 甲 = { 对象: 1, 如果: 2, 名字: 3 } // ✓ 属性名位
console.log(甲.对象 + 甲.如果 + 甲.名字) // ✓ 点号后允许关键字
console.log(甲["对象"]) // ✓ 字符串键可跑的靶子在 tests-chts/prop.ts(判定第⑨项:编译 + node 真跑)。
六、一个完整例子
示意(真实可跑的例子见 tests-chts/demo.ts,它的英文对照是 demo_en.ts, 两者运行结果必须完全一致 —— 判定第⑥项):
// 汉语源(.ts)
类型 长方形 {
宽: 数字
构造器(宽: 数字) { 自身.宽 = 宽 }
面积(): 数字 { 返回 自身.宽 * 自身.宽 }
}
常量 甲 = 新建 长方形(3)
如果 (甲.面积() === 9) { console.log("通过") } 否则 { console.log("失败") }// 编译产物(.js)—— 关键字全部变回英文,汉语标识符原样保留
class 长方形 {
constructor(宽) { this.宽 = 宽; }
面积() { return this.宽 * this.宽; }
}
const 甲 = new 长方形(3);
if (甲.面积() === 9) { console.log("通过"); }
else { console.log("失败"); }