懶惰之最|GitHub 實測

日文動詞「行いて」寫錯了?讓 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。

先說清楚它是什麼、不是什麼

安裝

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 個動詞的て形,其他活用形與完整句子沒有測。

專案資訊

測試設備:Mac mini M4 Pro(12 核、64GB)。內容依實際執行結果撰寫,數據為撰寫當時的實測值。

← 所有實測