docs(adr): ADR-0011: TypeScript for Reference Implementation Scripts
@aRustyDev 已经在做这个了。
开始于 2026年1月5日。
评估
这个 Issue 还没有评估数据。
描述
ADR-0011: TypeScript for Reference Implementation Scripts
Status
Accepted
Context
ADR-0010 establishes that mdbook-htmx generates server-side reference scripts. This ADR addresses the language choice: TypeScript vs JavaScript.
Decision Drivers
- Self-Documentation - Types describe manifest schema without separate docs
- Error Prevention - Catch type mismatches at compile time
- IDE Support - Autocomplete, refactoring, go-to-definition
- Runtime Compatibility - Must work in Workers, Node, Deno, Bun
- User Accessibility - Not all users know TypeScript
Options Considered
Option A: JavaScript Only
Plain JavaScript with JSDoc comments for types.
/**
* @param {import('./types').User | null} user
* @param {import('./types').Page} page
* @returns {boolean}
*/
function isAuthorized(user, page) {
return page.auth.access === 'public' || user !== null;
}
Pros:
- No build step
- Universally understood
- Runs directly in Node
Cons:
- Types are comments, not enforced
- Verbose JSDoc for complex types
- Less IDE support than native TS
Option B: TypeScript (Recommended)
TypeScript with explicit types.
import type { User, Page } from './types';
function isAuthorized(user: User | null, page: Page): boolean {
return page.auth.access === 'public' || user !== null;
}
Pros:
- Types are enforced
- Self-documenting
- Excellent IDE support
- Catches errors before runtime
- Industry standard for server-side code
Cons:
- Requires build step
- Learning curve for some users
Option C: Both (Generate TS, Transpile to JS)
Generate TypeScript, also include transpiled JavaScript.
book/htmx/scripts/
├── src/ # TypeScript source
│ └── *.ts
├── dist/ # Transpiled JavaScript
│ └── *.js
└── types/ # Declaration files
└── *.d.ts
Pros:
- TypeScript users get native TS
- JavaScript users get working code
- Type definitions available for both
Cons:
- Larger output
- Two versions to maintain conceptually
Decision
TypeScript as default, with JavaScript output option.
Default configuration:
[output.htmx.scripts]
language = "typescript"
emit-js = false # Also emit transpiled JS
emit-declarations = true # Emit .d.ts files
Users can set language = "javascript" for plain JS output with JSDoc.
Rationale
-
Types Document the Manifest
// Types ARE the documentation interface Page { auth: { access: 'public' | 'authenticated' | 'roles'; roles?: string[]; }; }Users reading the code understand the manifest structure without separate docs.
-
Cloudflare Workers Natively Supports TypeScript
# wrangler handles TypeScript automatically wrangler deployNo separate build step for the primary deployment target.
-
Error Prevention
// Caught at compile time if (page.auth.access === 'admin') { // Error: 'admin' not in union type -
Modern Standard
TypeScript is the de facto standard for:
- Cloudflare Workers
- Deno (native support)
- Node.js server applications
- Most modern web frameworks
Bundle Size Considerations
TypeScript transpiles to JavaScript with zero runtime overhead:
| Metric | TypeScript | Transpiled JS |
|---|---|---|
| Bundle size | N/A (source) | Same as hand-written JS |
| Runtime perf | N/A | Identical |
| Types at runtime | Erased | None |
The type imports are completely removed:
// Source
import type { Page } from './types';
// Transpiled - import disappears
Configuration
[output.htmx.scripts]
enabled = true
language = "typescript" # typescript | javascript
# TypeScript options
target = "es2022" # ECMAScript target
module = "esm" # esm | commonjs
strict = true # Strict type checking
emit-js = false # Also generate .js files
emit-declarations = true # Generate .d.ts files
Consequences
Positive
- Types serve as schema documentation
- Compile-time error catching
- Better IDE experience
- Industry-standard choice
- Native Workers/Deno support
Negative
- Some users unfamiliar with TypeScript
- Build step required for Node.js (unless using ts-node)
Mitigation
- Include transpiled JS as option (
emit-js = true) - Provide tsconfig.json with recommended settings
- Document common TypeScript patterns
References
- 主要语言
- Rust
- 星标
- 0
- 派生
- 1
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
aRustyDev/mdbook-htmx 的其他 Issue
-
feat(ci): Implement cross-repo-validate compliance for docs sync可能重新可做 @aRustyDev 于 285 天前认领,目前没有进行中的 PR。 未关闭ci enhancement
aRustyDev/mdbook-htmx#58 · 1 条评论 · 已指派 1 人 ·
-
docs(htmx): Explain how HTMX works可能重新可做 @aRustyDev 于 287 天前认领,目前没有进行中的 PR。 未关闭
aRustyDev/mdbook-htmx#48 · 3 条评论 · 已指派 1 人 ·
-
docs(mdbook-htmx): Parent Issue for documentation可能重新可做 @aRustyDev 于 287 天前认领,目前没有进行中的 PR。 未关闭documentation
aRustyDev/mdbook-htmx#47 · 已指派 1 人 ·
-
docs(examples): Secure Self-Hosted Meilisearch via Cloudflare可能重新可做 @aRustyDev 于 287 天前认领,目前没有进行中的 PR。 未关闭documentation
aRustyDev/mdbook-htmx#46 · 已指派 1 人 ·
-
docs(examples): Kubernetes with Meilisearch可能重新可做 @aRustyDev 于 287 天前认领,目前没有进行中的 PR。 未关闭documentation
aRustyDev/mdbook-htmx#45 · 已指派 1 人 ·
查看 aRustyDev/mdbook-htmx 的全部 Issue
相似的 Issue
-
engine-rs P3 review-deferral wasm
难度 2/5 1-3 小时 新手友好度 77/100
maniator/verticopolis#1154 ·
维护者通常 1 天内回复
-
FFMPEG_BIN/FFPROBE_BIN are always overridden, so a working system ffmpeg cannot be used可能已有人在做 @Bilker1422 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
Stremio/stremio-service#116 · 1 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 68/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
-
bug
难度 2/5 1-3 小时 新手友好度 83/100
维护者通常 1 天内回复