日文動詞「行いて」寫錯了?讓 TypeScript 編譯器幫你批改|Typed Japanese 實測
重點摘要
- Typed Japanese 把日文動詞變化規則寫成 TypeScript 型別,答案寫錯時由編譯器報錯。
- 實測 4 個正確て形(行って、書いて、買って、食べて)全部通過檢查,結束碼 0。
- 故意寫成學習者常犯的「行いて」「買いて」,2 個都被擋下(結束碼 2),錯誤訊息直接列出正解「行って」「買って」。
- 它不是翻譯器,本次只驗證 4 個動詞的て形,使用者需要會一點 TypeScript;npm install 約 25 秒。
- 結論: 適合會寫一點 TypeScript 的日文學習者,當動詞て形的練習本;不是翻譯器,只驗證 4 個動詞。
- 適合: 學日文且會一點 TypeScript 的人
- 不適合: 完全沒接觸過程式的人,或想要翻譯、整句文法檢查的人
| 實測項目 | 結果 |
|---|---|
| 正確答案(行って、書いて、買って、食べて) | 4/4 通過,exit 0 |
| 錯誤答案(行いて、買いて) | 2/2 被擋,exit 2,訊息列出正解 |
| 錯誤答案(書って) | 被擋,訊息列出正解書いて |
| npm install | 約 25 秒 |
寫日文作業時,你想說「行って」(去了之後),手一滑寫成「行いて」,老師打了一個叉。為什麼「買う」是「買って」、「行く」也是「行って」,「書く」卻是「書いて」?這類動詞變化(て形)規則多、例外也多,靠背很容易混。
Typed Japanese 的做法很特別:它把日文文法規則寫成 TypeScript 的型別。你把答案寫進程式裡,TypeScript 編譯器檢查,寫錯就直接報錯。我們拿它實際驗證了動詞て形,結果如下。
測試設備:Mac mini M4 Pro(12 核、64GB);受測版本 0.1.0(提交 8a9f55ec),授權 MIT。
先說清楚它是什麼、不是什麼
- 它是一組 TypeScript 型別定義,不是翻譯器,也不是網頁課程。
- 只能檢查它內建規則涵蓋的變化;本文只驗證 4 個動詞的て形(行く、書く、買う、食べる)。
- 你需要會一點 TypeScript,至少能安裝 Node.js、執行
npx,看得懂型別錯誤訊息。
安裝
git clone https://github.com/typedgrammar/typed-japanese.git
cd typed-japanese
npm install --ignore-scripts
npm run typecheck # 官方檢查,無錯誤
npm install 本次約 25 秒,官方檢查不到 1 秒。
實測一:四個正確答案
建立 src/mine/good.ts:
import type { ConjugateVerb, GodanVerb, IchidanVerb } from "../verb-types";
type 行く = GodanVerb & { stem: "行"; ending: "く" };
type 書く = GodanVerb & { stem: "書"; ending: "く" };
type 買う = GodanVerb & { stem: "買"; ending: "う" };
type 食べる = IchidanVerb & { stem: "食べ"; ending: "る" };
export const a: ConjugateVerb<行く, "Te"> = "行って";
export const b: ConjugateVerb<書く, "Te"> = "書いて";
export const c: ConjugateVerb<買う, "Te"> = "買って";
export const d: ConjugateVerb<食べる, "Te"> = "食べて";
npx tsc --noEmit --strict --skipLibCheck --target es2020 --pretty false src/mine/good.ts
四個全部通過,結束碼 0。連「行く」這個て形不照一般規則(不是「行いて」)的例外,它的型別也有處理。

實測二:學習者常犯的錯
把答案改成「行いて」「買いて」,同樣的指令跑出:
src/mine/bad.ts(6,14): error TS2322: Type '"行いて"' is not assignable to type '"行って"'.
src/mine/bad.ts(7,14): error TS2322: Type '"買いて"' is not assignable to type '"買って"'.
結束碼 2,兩個都被擋下。怎麼讀這段訊息:Type '"行いて"' 是你寫的,type '"行って"' 是正解。所以它不只告訴你錯了,還直接給你答案。

另外測了「書って」(把「書く」誤寫成促音),同樣被擋,訊息指出正解是「書いて」。
結果整理
| 項目 | 結果 |
|---|---|
| 正確答案:行って、書いて、買って、食べて | 4/4 通過(exit 0) |
| 錯誤答案:行いて、買いて | 2/2 被擋(exit 2),訊息列出正解 |
| 錯誤答案:書って | 被擋,訊息列出正解「書いて」 |
| 安裝 | npm install 約 25 秒 |
常見問題
為什麼不直接用字典或翻譯軟體? 字典告訴你單字的意思,Typed Japanese 檢查的是「你寫的變化形對不對」。它把規則寫在型別裡,你猜一個答案,編譯器立刻比對,適合反覆練習。
可以測哪些變化? 專案 README 列出的動詞變化包含辭書形、ます形、て形、た形、ない形、可能形等,用法是把 "Te" 換成其他名稱(例如 "Ta")。本文只實際驗證て形,其他形式請自己先小量測試再信任。
錯誤訊息看不懂怎麼辦? 找 is not assignable to type 這句:前面是你寫的,後面是它認定的正解。行號 (6,14) 代表第 6 行第 14 個字元,對照檔案就知道是哪一題。
安裝卡住? 需要 Node.js(本次測試用 22 版)。若 npm install 有關於 eslint 的棄用警告,是套件本身的提示,本次不影響型別檢查。
適合與不適合
適合:正在學日文、同時會寫一點 TypeScript 的人,把它當動詞變化的練習本:先自己猜答案寫進去,讓編譯器批改。
不適合:完全沒接觸過程式的人(光是安裝環境就有門檻)、想要翻譯或整句文法檢查的人。本次只驗證 4 個動詞的て形,其他活用形與完整句子沒有測。
專案資訊
- 專案連結:https://github.com/typedgrammar/typed-japanese
- 授權:MIT