{"id":13496168,"url":"https://github.com/total-typescript/advanced-typescript-workshop","last_synced_at":"2025-04-12T18:42:51.042Z","repository":{"id":49765078,"uuid":"517992299","full_name":"total-typescript/advanced-typescript-workshop","owner":"total-typescript","description":"Matt's Advanced TypeScript workshop","archived":false,"fork":false,"pushed_at":"2024-01-16T19:03:38.000Z","size":80,"stargazers_count":863,"open_issues_count":1,"forks_count":135,"subscribers_count":20,"default_branch":"main","last_synced_at":"2025-04-03T20:12:25.576Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/total-typescript.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-07-26T09:16:37.000Z","updated_at":"2025-03-05T11:49:31.000Z","dependencies_parsed_at":"2024-10-31T11:41:14.558Z","dependency_job_id":null,"html_url":"https://github.com/total-typescript/advanced-typescript-workshop","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/total-typescript%2Fadvanced-typescript-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/total-typescript%2Fadvanced-typescript-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/total-typescript%2Fadvanced-typescript-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/total-typescript%2Fadvanced-typescript-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/total-typescript","download_url":"https://codeload.github.com/total-typescript/advanced-typescript-workshop/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248617125,"owners_count":21134190,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T19:01:43.279Z","updated_at":"2025-04-12T18:42:50.973Z","avatar_url":"https://github.com/total-typescript.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Advanced TypeScript Workshop\n\nHello! My name's [Matt Pocock](https://twitter.com/mattpocockuk). This is a workshop repo to teach you about Advanced TypeScript.\n\n## Topics Covered\n\n- Using `typeof` and `as const` to derive types from runtime\n- Generics\n- Assertion functions \u0026 type predicates\n- Template literal types\n- Conditional types \u0026 `infer`\n- Diagnosing type errors\n\nThe plan of the workshop is to get you more confident with complex type signatures, less likely to want to use `any`, and faster at diagnosing errors.\n\n## Workshop Plan\n\nWe'll be running from 9AM PT - 2PM PT. Here's the plan:\n\n- 09:00-9:15: **Setup \u0026 Housekeeping**\n- 09:15-10:30: **First session**\n- 10:30-10:45: **Coffee Break**\n- 10:45-12:00: **Second session**\n- 12:00-12:30: **Lunch**\n- 12:30-14:00: **Third session**\n\nWe'll be working through the material in this repository, mostly in small groups.\n\n## System Requirements\n\n- git v2.14.1 or greater\n- NodeJS v16.15.0 or greater\n- npm v8.5.0 or greater\n\nAll of these must be available in your `PATH`. To verify things are set up properly, you can run this:\n\n```bash\ngit --version\nnode --version\nnpm --version\n```\n\n## Setup\n\nAfter you've made sure to have the correct things (and versions) installed, you should be able to just run a few commands to get set up:\n\n```bash\ngit clone https://github.com/mattpocock/advanced-typescript-workshop.git\ncd advanced-typescript-workshop\nnpm install\n```\n\nThat's it! You'll now have all the dependencies you need to work through the workshop exercises.\n\n## Exercises\n\nExercises are in the [`./exercises`](./exercises) folder. They're designed to be worked through one after the other.\n\nEach exercise follows a similar pattern:\n\n- Look at the file with the `*.code.ts` extension. This gives you the code we're going to be working through and trying to understand.\n- Read through the `*.exercise.ts` file. Read through the file, comment-by-comment, and follow the instructions by either editing the file inline, or editing the `*.code.ts` file.\n- Wherever you see reference to `Solution #1`, check the `*.solutions.ts` file when you want to see the solution. **Make sure you check the solution before proceeding!** There's often crucial information there.\n\nBe careful to read through each part of the exercise carefully - if you skip over parts of them, it might get difficult to find your way back.\n\nAlso, consider **splitting your IDE into two panels**, both looking at the same file. You can read from one, and write in the other - meaning you don't have to scroll up and down too much.\n\n### Emoji\n\nExercises use emoji to express various different things:\n\n- 💡 - A new idea appears!\n- 🛠 - Write some code!\n- 🧑‍💻 - Your team lead has some thoughts...\n- 🕵️‍♂️ - Time for an investigation...\n- ⛔️ - Eek! A type error.\n- ✅ - Hooray! The type error was fixed.\n- 🚁 - Hover over something.\n- 🔮 - Do a go-to-definition.\n\n## License\n\nThis material is available for private, non-commercial use under the [GPL version 3](http://www.gnu.org/licenses/gpl-3.0-standalone.html).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftotal-typescript%2Fadvanced-typescript-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftotal-typescript%2Fadvanced-typescript-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftotal-typescript%2Fadvanced-typescript-workshop/lists"}