# Unassisted TypeScript practice, one skill at a time

> 6 TypeScript resources for recall, tracing, debugging, finding flaws, idiomatic code, and reviewing AI-generated code.

- Canonical HTML: [https://unrust.dev/languages/typescript](https://unrust.dev/languages/typescript)
- Markdown representation: [https://unrust.dev/languages/typescript/index.md](https://unrust.dev/languages/typescript/index.md)

## TypeScript resources

- [TypeScript Code Recall Practice for Developers](https://unrust.dev/languages/typescript/code-recall/index.md): Practice TypeScript code recall with small functions that use narrow types, explicit return shapes, and guards rather than relying on assertions to force a draft to compile.
- [TypeScript Debugging Practice for Developers](https://unrust.dev/languages/typescript/debugging/index.md): Debug TypeScript by using compiler evidence alongside runtime observations, especially where broad types, optional fields, assertions, and external data can mask the actual failure.
- [Find TypeScript Logic Flaws Before Shipping](https://unrust.dev/languages/typescript/find-the-flaw/index.md): Find TypeScript flaws by checking whether conditionals, narrowing, and assertions preserve the runtime contract instead of assuming types make every branch safe.
- [TypeScript Code Tracing Practice for Developers](https://unrust.dev/languages/typescript/code-tracing/index.md): Trace TypeScript by following runtime values through narrowed unions, object references, and async branches while using type declarations as hypotheses rather than execution records.
- [Writing Idiomatic TypeScript with Clear Types](https://unrust.dev/languages/typescript/idiomatic-code/index.md): Write idiomatic TypeScript by making type boundaries, narrowing, and intent clear without using assertions or generic abstractions to hide unresolved runtime questions.
- [Reviewing AI-Generated TypeScript Code](https://unrust.dev/languages/typescript/reviewing-ai-generated-code/index.md): Review AI-generated TypeScript by checking whether type assertions, inferred shapes, and runtime validation actually preserve the contract at every external boundary.

Next step: [Take the free diagnostic](https://unrust.dev/diagnostic/index.md)
