Skip to content

中文对照表 ​

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)。因此:

ts
常量 对象 = 1;      // ✗ 编不过:对象 是 object 的译名,占了标识符位
常量 我的对象 = 1;   // ✓ 不是关键字,照旧可用

对象 / 变量 / 函数 / 类型 这类词不能再当标识符用。 英文关键字永远可写(const obj = 1),这是逃生通道。

之所以选「全局生效」而不是「仅 .ts 生效」:改一处即可覆盖整条链, 且实测上游官方 conformance 语料 5894 个真实 .ts/.tsx 零回归 (tests-chts/judge_oss.ps1 -Sample 0)。取舍写在 README 的「已知局限」第 1 条。

五、关键字当属性名仍然合法(边界在哪) ​

保留的是标识符位置,不是属性名位置:

ts
常量 甲 = { 对象: 1, 如果: 2, 名字: 3 }   // ✓ 属性名位
console.log(甲.对象 + 甲.如果 + 甲.名字)    // ✓ 点号后允许关键字
console.log(甲["对象"])                   // ✓ 字符串键

可跑的靶子在 tests-chts/prop.ts(判定第⑨项:编译 + node 真跑)。

六、一个完整例子 ​

示意(真实可跑的例子见 tests-chts/demo.ts,它的英文对照是 demo_en.ts, 两者运行结果必须完全一致 —— 判定第⑥项):

ts
// 汉语源(.ts)
类型 长方形 {
  宽: 数字
  构造器(宽: 数字) { 自身.宽 = 宽 }
  面积(): 数字 { 返回 自身.宽 * 自身.宽 }
}
常量 甲 = 新建 长方形(3)
如果 (甲.面积() === 9) { console.log("通过") } 否则 { console.log("失败") }
js
// 编译产物(.js)—— 关键字全部变回英文,汉语标识符原样保留
class 长方形 {
    constructor(宽) { this.宽 = 宽; }
    面积() { return this.宽 * this.宽; }
}
const 甲 = new 长方形(3);
if (甲.面积() === 9) { console.log("通过"); }
else { console.log("失败"); }

以 MIT / Apache-2.0 等宽松许可发布 · 联系作者 QQ:1396257961