1<!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="description" content="Learn how to use TypeScript to level-up your applications as a web developer through exercise driven self-paced workshops and tutorials hosted by TypeScript wizard Matt Pocock."/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:creator" content="@mattpocockuk"/><meta property="og:description" content="Learn how to use TypeScript to level-up your applications as a web developer through exercise driven self-paced workshops and tutorials hosted by TypeScript wizard Matt Pocock."/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:site_name" content="Total TypeScript"/><meta property="author" content="Matt Pocock"/><link rel="icon" href="https://www.totaltypescript.com/favicon.ico"/><title>Total TypeScript Products | Total TypeScript</title><meta name="robots" content="index,follow"/><meta property="og:title" content="Total TypeScript Products"/><meta property="og:url" content="https://www.totaltypescript.com/products"/><meta property="og:type" content="website"/><meta property="og:image" content="https://www.totaltypescript.com/api/og/og-root"/><link rel="canonical" href="https://www.totaltypescript.com/products"/><meta property="keywords" content="typescript, course, xstate"/><meta name="next-head-count" content="19"/><link rel="alternate" type="application/rss+xml" title="RSS Feed for TotalTypeScript.com" href="/rss.xml"/><link rel="preload" href="/_next/static/media/3b6dbe23294c0957-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/df4a37ac54984bf4-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/4d28dfaa49801b8d-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/0e098c3cd17bf3e3-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/5279a5b4c346816f-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/da161c0ae542595a-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/a271541ae7db69f5-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/1bd66e126e780bd6-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/1173bcf0b182f582-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/d3d0f63e82862b69-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/10e159d6d4678dfa-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/ee72a70f134f55d1-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/b5a5455e58dd837c-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/193831e6df95d440-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/7e02b2f19043e05f-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/dddce3d696ae97de-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/135c2f8fd198fb8a-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/11622c3f36460aab-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/3be981b3fad5a2ed-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/b6deaf2a28508ac1-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/442d4d2758b5da3b-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/51188b05c30cec41-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/7d2c1de1969a05d2-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/4b618201be9a9241-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/css/2aa9bda2de2bd66b.css" as="style"/>
1<link rel="preload" href="/_next/static/css/5435acc537a21fc3.css" as="style"/><link rel="stylesheet" href="/_next/static/css/2aa9bda2de2bd66b.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/css/5435acc537a21fc3.css" data-n-p=""/><noscript data-n-css=""></noscript>
1<script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script>
1<script src="/_next/static/chunks/webpack-046754074540f027.js" defer=""></script>
1<script src="/_next/static/chunks/framework-57aa6bfff3ba138e.js" defer=""></script>
1<script src="/_next/static/chunks/main-9f5faa0ad575b210.js" defer=""></script>
1<script src="/_next/static/chunks/pages/_app-2f9220aa84150dd8.js" defer=""></script>
1<script src="/_next/static/chunks/cfc8a0c3-9a0ffba2b69233a4.js" defer=""></script>
1<script src="/_next/static/chunks/3246-4786a04326bcd547.js" defer=""></script>
1<script src="/_next/static/chunks/966-c6d78cb62a471142.js" defer=""></script>
1<script src="/_next/static/chunks/6872-e50398aa23b4c878.js" defer=""></script>
1<script src="/_next/static/chunks/1468-d2e1d8de7bcf697b.js" defer=""></script>
1<script src="/_next/static/chunks/3618-492a287a94ccf7fe.js" defer=""></script>
1<script src="/_next/static/chunks/7343-87fe7be8acb78b1e.js" defer=""></script>
1<script src="/_next/static/chunks/8467-9951f0d540782da6.js" defer=""></script>
1<script src="/_next/static/chunks/661-3c655cda83a2fbf1.js" defer=""></script>
1<script src="/_next/static/chunks/1200-392dcf56221d6f26.js" defer=""></script>
1<script src="/_next/static/chunks/pages/products-e38b83d3cdff7e68.js" defer=""></script>
1<script src="/_next/static/m3oAlgIZjHURYbYeCaJmd/_buildManifest.js" defer=""></script>
1<script src="/_next/static/m3oAlgIZjHURYbYeCaJmd/_ssgManifest.js" defer=""></script>
1</head><body class="antialiased"><div id="__next"><div id="layout" class="relative font-sans __variable_cd4cdd __variable_3443bf __variable_b69a5c"><div style="position:fixed;z-index:9999;top:16px;left:16px;right:16px;bottom:16px;pointer-events:none"></div><nav aria-label="top" class="dark top-0 z-30 flex h-14 w-full flex-col items-center justify-center border-b bg-background pl-3 pr-0 text-foreground sm:h-16 sm:pl-4 md:pr-3 print:hidden fixed"><div class="flex items-stretch justify-between w-full h-full"><span><a aria-label="Total TypeScript Home" class="group group relative z-10 flex h-full flex-shrink-0 items-center font-text text-base font-semibold text-white md:text-lg lg:text-xl" tabindex="0" href="/"><span aria-hidden="true" class="text-base hidden md:block lg:hidden">TT.</span><span aria-hidden="false" class="mr-0.5 font-light opacity-90 block md:hidden lg:block">Total</span><span aria-hidden="false" class="block md:hidden lg:block">TypeScript</span></a></span><div class="hidden w-full items-center justify-end md:flex"><ul class="left-0 top-0 flex h-full w-full items-center justify-start absolute pl-16 lg:justify-center lg:pl-0"><li class="flex h-full items-center justify-center"><a class="group relative flex h-full items-center justify-center gap-0.5 px-2 py-2 text-sm font-normal transition duration-500 ease-in-out hover:bg-[radial-gradient(circle_at_50%_200%,hsla(177,87%,75%,0.4)_0%,_transparent_60%)] active:bg-transparent sm:min-w-[60px] sm:gap-1 sm:px-2 lg:min-w-[80px] lg:px-2.5 lg:text-base xl:px-3 font-medium text-white" href="/workshops"><span class="transition group-hover:opacity-100 opacity-90"><span class="hidden lg:inline-block">Pro</span> <!-- -->Workshops </span></a></li><li class="flex h-full items-center justify-center"><a class="group relative flex h-full items-center justify-center gap-0.5 px-2 py-2 text-sm font-normal transition duration-500 ease-in-out hover:bg-[radial-gradient(circle_at_50%_200%,hsla(177,87%,75%,0.4)_0%,_transparent_60%)] active:bg-transparent sm:min-w-[60px] sm:gap-1 sm:px-2 lg:min-w-[80px] lg:px-2.5 lg:text-base xl:px-3 font-medium text-white" href="/tutorials"><span class="transition group-hover:opacity-100 opacity-90">Tutorials</span></a></li><li class="flex h-full items-center justify-center"><a class="group relative flex h-full items-center justify-center gap-0.5 px-2 py-2 text-sm font-normal transition duration-500 ease-in-out hover:bg-[radial-gradient(circle_at_50%_200%,hsla(177,87%,75%,0.4)_0%,_transparent_60%)] active:bg-transparent sm:min-w-[60px] sm:gap-1 sm:px-2 lg:min-w-[80px] lg:px-2.5 lg:text-base xl:px-3 font-medium text-white" href="/tips"><span class="transition group-hover:opacity-100 opacity-90">Tips</span></a></li><li class="flex h-full items-center justify-center"><a class="group relative flex h-full items-center justify-center gap-0.5 px-2 py-2 text-sm font-normal transition duration-500 ease-in-out hover:bg-[radial-gradient(circle_at_50%_200%,hsla(177,87%,75%,0.4)_0%,_transparent_60%)] active:bg-transparent sm:min-w-[60px] sm:gap-1 sm:px-2 lg:min-w-[80px] lg:px-2.5 lg:text-base xl:px-3 font-medium text-white" href="/articles"><span class="transition group-hover:opacity-100 opacity-90">Articles</span></a></li><li class="flex h-full items-center justify-center"><a class="group relative flex h-full items-center justify-center gap-0.5 px-2 py-2 text-sm font-normal transition duration-500 ease-in-out hover:bg-[radial-gradient(circle_at_50%_200%,hsla(177,87%,75%,0.4)_0%,_transparent_60%)] active:bg-transparent sm:min-w-[60px] sm:gap-1 sm:px-2 lg:min-w-[80px] lg:px-2.5 lg:text-base xl:px-3 font-medium text-white" href="/books/total-typescript-essentials"><span class="transition group-hover:opacity-100 opacity-90">Book<!-- --> <span class="absolute inline-block -translate-y-1 scale-75 rounded bg-white/5 px-1 py-0.5 text-xs font-semibold uppercase tracking-wide text-primary">New</span></span></a></li></ul><ul class="flex h-full flex-shrink-0 items-center justify-center"><div aria-hidden="true"></div></ul></div><div class="flex items-center md:hidden"><ul class="flex items-center justify-center"><li class="px-1"><button class="group relative z-10 flex h-full items-center gap-1 px-2.5 py-2 text-sm font-normal opacity-90 transition hover:opacity-100 sm:px-2 sm:py-2 md:px-2 lg:px-2 lg:text-sm"><div class="flex items-center gap-1"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true" class="h-3.5 w-3.5 opacity-80 transition group-hover:opacity-100"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg><span class="block md:hidden lg:hidden">Search</span></div><div class="-mb-0.5 hidden items-center gap-0.5 rounded bg-white/10 px-1 font-mono text-xs font-semibold text-gray-300 md:flex" aria-label="shortcut"><span>â</span><span>K</span></div></button></li><li><button aria-label="Toggle Menu" aria-expanded="false" class="z-10 mr-2 flex h-12 w-12 items-center justify-center rounded-md p-1 md:hidden"><svg width="24" height="24" viewBox="0 0 24 24">
1<path d="M0 9.5L24 9.5" stroke="currentColor" stroke-width="1.5"></path><path d="M0 14.5L15 14.5" stroke="currentColor" stroke-width="1.5"></path></svg></button></li></ul></div></div></nav><div class="flex h-full min-h-screen flex-grow flex-col"><header class="mx-auto flex w-full max-w-4xl flex-col justify-center px-5 pb-5 pt-32 sm:pt-40"><h1 class="mb-4 text-center font-heading text-4xl font-semibold sm:text-5xl">Total TypeScript Products</h1><h2 class="text-center text-gray-300 sm:text-xl"><span data-br=":R15r6:" data-brr="1" style="display:inline-block;vertical-align:top;text-decoration:inherit">All <!-- -->Total TypeScript<!-- --> products that you can buy today to level up at TypeScript.</span>
1<script>self.__wrap_balancer=(t,e,n)=>{n=n||document.querySelector(`[data-br="${t}"]`);let o=n.parentElement,r=E=>n.style.maxWidth=E+"px";n.style.maxWidth="";let i=o.clientWidth,s=o.clientHeight,c=i/2,u=i,d;if(i){for(;c+1<u;)d=~~((c+u)/2),r(d),o.clientHeight==s?u=d:c=d;r(u*e+i*(1-e))}};self.__wrap_balancer(":R15r6:",1)</script>
1</h2></header><main id="products-index-page" class="mx-auto flex w-full max-w-4xl flex-col gap-10 px-5 py-16"><div><div class="mt-4 flex grid-cols-5 flex-col md:grid"><aside class="col-span-2"><img alt="TypeScript Pro Complete" loading="lazy" width="300" height="300" decoding="async" data-nimg="1" class="mx-auto" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fres.cloudinary.com%2Ftotal-typescript%2Fimage%2Fupload%2Fv1724417359%2Fcomplete-volume_2x_vjtjuv.png&w=384&q=75 1x, /_next/image?url=https%3A%2F%2Fres.cloudinary.com%2Ftotal-typescript%2Fimage%2Fupload%2Fv1724417359%2Fcomplete-volume_2x_vjtjuv.png&w=640&q=75 2x" src="/_next/image?url=https%3A%2F%2Fres.cloudinary.com%2Ftotal-typescript%2Fimage%2Fupload%2Fv1724417359%2Fcomplete-volume_2x_vjtjuv.png&w=640&q=75"/></aside><div class="col-span-3 flex flex-col gap-3 py-5 pt-5 sm:pl-3 sm:pr-8 md:pt-5"><div class="self-center font-mono text-xs font-semibold uppercase text-cyan-300 sm:self-start"></div><h3 class="text-center font-text text-3xl font-bold sm:text-left sm:text-4xl"><a class="decoration-cyan-300 underline-offset-4 transition hover:underline sm:flex-row" href="/products/complete-volume"><span data-br=":R54pr6:" data-brr="1" style="display:inline-block;vertical-align:top;text-decoration:inherit">TypeScript Pro Complete</span>
1<script>self.__wrap_balancer=(t,e,n)=>{n=n||document.querySelector(`[data-br="${t}"]`);let o=n.parentElement,r=E=>n.style.maxWidth=E+"px";n.style.maxWidth="";let i=o.clientWidth,s=o.clientHeight,c=i/2,u=i,d;if(i){for(;c+1<u;)d=~~((c+u)/2),r(d),o.clientHeight==s?u=d:c=d;r(u*e+i*(1-e))}};self.__wrap_balancer(":R54pr6:",1)</script>
1</a></h3><div class="flex flex-col-reverse items-center justify-center gap-3 pt-2 sm:flex-row sm:justify-start"><div class="w-full sm:w-auto"><a class="group flex items-center justify-center gap-1 rounded bg-gray-800 px-4 py-2 font-medium text-cyan-300 transition hover:bg-gray-700/75 sm:inline-flex sm:text-lg" href="/products/complete-volume">View<!-- --> <span class="relative transition group-hover:translate-x-1">â</span></a></div><div class="flex items-center justify-center gap-3 sm:justify-start"></div></div><div class="w-full"><div class="prose prose-sm w-full max-w-none pt-5 sm:prose-lg prose-p:text-gray-300"><p>Total TypeScript Complete Volume is a set of five full TypeScript workshops for the advanced-beginner to expert professional TypeScript programmer that wants to take their skills to the next level. This bundle includes all of the Total TypeScript self-paced workshops.</p></div></div><h4 class="pt-5 text-sm font-semibold uppercase text-gray-300">Includes</h4><div class="grid w-full grid-cols-1 gap-5 md:grid-cols-2"><a class="group flex w-full flex-row items-center gap-2" href="/workshops/typescript-pro-essentials"><img alt="TypeScript Pro Essentials" loading="lazy" width="72" height="72" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png&w=96&q=75 1x, /_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png&w=256&q=75 2x" src="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png&w=256&q=75"/><span class="w-full leading-tight text-gray-200 transition group-hover:text-white group-hover:underline"><span data-br=":R53b4pr6:" data-brr="1" style="display:inline-block;vertical-align:top;text-decoration:inherit">TypeScript Pro Essentials</span>
1<script>self.__wrap_balancer=(t,e,n)=>{n=n||document.querySelector(`[data-br="${t}"]`);let o=n.parentElement,r=E=>n.style.maxWidth=E+"px";n.style.maxWidth="";let i=o.clientWidth,s=o.clientHeight,c=i/2,u=i,d;if(i){for(;c+1<u;)d=~~((c+u)/2),r(d),o.clientHeight==s?u=d:c=d;r(u*e+i*(1-e))}};self.__wrap_balancer(":R53b4pr6:",1)</script>
1</span></a><a class="group flex w-full flex-row items-center gap-2" href="/workshops/type-transformations"><img alt="Type Transformations" loading="lazy" width="72" height="72" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F8d26aee5def2397f419bb038fd8879286fd41bda-768x768.png&w=96&q=75 1x, /_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F8d26aee5def2397f419bb038fd8879286fd41bda-768x768.png&w=256&q=75 2x" src="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F8d26aee5def2397f419bb038fd8879286fd41bda-768x768.png&w=256&q=75"/><span class="w-full leading-tight text-gray-200 transition group-hover:text-white group-hover:underline"><span data-br=":R55b4pr6:" data-brr="1" style="display:inline-block;vertical-align:top;text-decoration:inherit">Type Transformations</span>
1<script>self.__wrap_balancer=(t,e,n)=>{n=n||document.querySelector(`[data-br="${t}"]`);let o=n.parentElement,r=E=>n.style.maxWidth=E+"px";n.style.maxWidth="";let i=o.clientWidth,s=o.clientHeight,c=i/2,u=i,d;if(i){for(;c+1<u;)d=~~((c+u)/2),r(d),o.clientHeight==s?u=d:c=d;r(u*e+i*(1-e))}};self.__wrap_balancer(":R55b4pr6:",1)</script>
1</span></a><a class="group flex w-full flex-row items-center gap-2" href="/workshops/typescript-generics"><img alt="TypeScript Generics" loading="lazy" width="72" height="72" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F12ef51ed533404ccf132765c75be8b6fe600bcda-769x769.png&w=96&q=75 1x, /_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F12ef51ed533404ccf132765c75be8b6fe600bcda-769x769.png&w=256&q=75 2x" src="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F12ef51ed533404ccf132765c75be8b6fe600bcda-769x769.png&w=256&q=75"/><span class="w-full leading-tight text-gray-200 transition group-hover:text-white group-hover:underline"><span data-br=":R57b4pr6:" data-brr="1" style="display:inline-block;vertical-align:top;text-decoration:inherit">TypeScript Generics</span>
1<script>self.__wrap_balancer=(t,e,n)=>{n=n||document.querySelector(`[data-br="${t}"]`);let o=n.parentElement,r=E=>n.style.maxWidth=E+"px";n.style.maxWidth="";let i=o.clientWidth,s=o.clientHeight,c=i/2,u=i,d;if(i){for(;c+1<u;)d=~~((c+u)/2),r(d),o.clientHeight==s?u=d:c=d;r(u*e+i*(1-e))}};self.__wrap_balancer(":R57b4pr6:",1)</script>
1</span></a><a class="group flex w-full flex-row items-center gap-2" href="/workshops/advanced-typescript-patterns"><img alt="Advanced TypeScript Patterns" loading="lazy" width="72" height="72" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2Fce94d457bbfa7580dd803aaa5630a7c6ebed9fee-927x927.png&w=96&q=75 1x, /_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2Fce94d457bbfa7580dd803aaa5630a7c6ebed9fee-927x927.png&w=256&q=75 2x" src="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2Fce94d457bbfa7580dd803aaa5630a7c6ebed9fee-927x927.png&w=256&q=75"/><span class="w-full leading-tight text-gray-200 transition group-hover:text-white group-hover:underline"><span data-br=":R59b4pr6:" data-brr="1" style="display:inline-block;vertical-align:top;text-decoration:inherit">Advanced TypeScript Patterns</span>
1<script>self.__wrap_balancer=(t,e,n)=>{n=n||document.querySelector(`[data-br="${t}"]`);let o=n.parentElement,r=E=>n.style.maxWidth=E+"px";n.style.maxWidth="";let i=o.clientWidth,s=o.clientHeight,c=i/2,u=i,d;if(i){for(;c+1<u;)d=~~((c+u)/2),r(d),o.clientHeight==s?u=d:c=d;r(u*e+i*(1-e))}};self.__wrap_balancer(":R59b4pr6:",1)</script>
1</span></a><a class="group flex w-full flex-row items-center gap-2" href="/workshops/advanced-react-with-typescript"><img alt="Advanced React with TypeScript" loading="lazy" width="72" height="72" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2Fbb6a657e3e8d8a8dc4d66783d23a56797b22b882-1200x1200.png&w=96&q=75 1x, /_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2Fbb6a657e3e8d8a8dc4d66783d23a56797b22b882-1200x1200.png&w=256&q=75 2x" src="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2Fbb6a657e3e8d8a8dc4d66783d23a56797b22b882-1200x1200.png&w=256&q=75"/><span class="w-full leading-tight text-gray-200 transition group-hover:text-white group-hover:underline"><span data-br=":R5bb4pr6:" data-brr="1" style="display:inline-block;vertical-align:top;text-decoration:inherit">Advanced React with TypeScript</span>
1<script>self.__wrap_balancer=(t,e,n)=>{n=n||document.querySelector(`[data-br="${t}"]`);let o=n.parentElement,r=E=>n.style.maxWidth=E+"px";n.style.maxWidth="";let i=o.clientWidth,s=o.clientHeight,c=i/2,u=i,d;if(i){for(;c+1<u;)d=~~((c+u)/2),r(d),o.clientHeight==s?u=d:c=d;r(u*e+i*(1-e))}};self.__wrap_balancer(":R5bb4pr6:",1)</script>
1</span></a><a class="group flex w-full flex-row items-center gap-2" href="/bonuses/typescript-expert-interviews"><img alt="TypeScript Expert Interviews" loading="lazy" width="72" height="72" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F46de258d27a5a4e6e4a901bcda13906bc7337b66-1118x1118.png&w=96&q=75 1x, /_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F46de258d27a5a4e6e4a901bcda13906bc7337b66-1118x1118.png&w=256&q=75 2x" src="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F46de258d27a5a4e6e4a901bcda13906bc7337b66-1118x1118.png&w=256&q=75"/><span class="w-full leading-tight text-gray-200 transition group-hover:text-white group-hover:underline"><h3 class="font-semibold text-yellow-200">Bonusð</h3><span data-br=":R5db4pr6:" data-brr="1" style="display:inline-block;vertical-align:top;text-decoration:inherit">TypeScript Expert Interviews</span>
1<script>self.__wrap_balancer=(t,e,n)=>{n=n||document.querySelector(`[data-br="${t}"]`);let o=n.parentElement,r=E=>n.style.maxWidth=E+"px";n.style.maxWidth="";let i=o.clientWidth,s=o.clientHeight,c=i/2,u=i,d;if(i){for(;c+1<u;)d=~~((c+u)/2),r(d),o.clientHeight==s?u=d:c=d;r(u*e+i*(1-e))}};self.__wrap_balancer(":R5db4pr6:",1)</script>
1</span></a></div><h4 class="pt-5 text-sm font-semibold uppercase text-gray-300">Features</h4><div class="grid grid-cols-1 gap-4 sm:grid-cols-2"><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Advanced-Beginner - Expert+</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>5 Self-Paced Workshops</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Interactive Exercises</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Best Value âï¸</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Discord Community</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Progress Tracking</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Streaming HD Video</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>English Transcripts & Subtitles</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Completion Certificate</span></div></div></div></div><footer class="flex items-center px-5 py-3"></footer></div><div><div class="mt-4 flex grid-cols-5 flex-col md:grid"><aside class="col-span-2"><img alt="TypeScript Pro Essentials" loading="lazy" width="300" height="300" decoding="async" data-nimg="1" class="mx-auto" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png&w=384&q=75 1x, /_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png&w=640&q=75 2x" src="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png&w=640&q=75"/></aside><div class="col-span-3 flex flex-col gap-3 py-5 pt-5 sm:pl-3 sm:pr-8 md:pt-5">
1<div class="self-center font-mono text-xs font-semibold uppercase text-cyan-300 sm:self-start"></div><h3 class="text-center font-text text-3xl font-bold sm:text-left sm:text-4xl"><a class="decoration-cyan-300 underline-offset-4 transition hover:underline sm:flex-row" href="/products/typescript-pro-essentials"><span data-br=":R559r6:" data-brr="1" style="display:inline-block;vertical-align:top;text-decoration:inherit">TypeScript Pro Essentials</span>
1<script>self.__wrap_balancer=(t,e,n)=>{n=n||document.querySelector(`[data-br="${t}"]`);let o=n.parentElement,r=E=>n.style.maxWidth=E+"px";n.style.maxWidth="";let i=o.clientWidth,s=o.clientHeight,c=i/2,u=i,d;if(i){for(;c+1<u;)d=~~((c+u)/2),r(d),o.clientHeight==s?u=d:c=d;r(u*e+i*(1-e))}};self.__wrap_balancer(":R559r6:",1)</script>
1</a></h3><div class="flex flex-col-reverse items-center justify-center gap-3 pt-2 sm:flex-row sm:justify-start"><div class="w-full sm:w-auto"><a class="group flex items-center justify-center gap-1 rounded bg-gray-800 px-4 py-2 font-medium text-cyan-300 transition hover:bg-gray-700/75 sm:inline-flex sm:text-lg" href="/products/typescript-pro-essentials">View<!-- --> <span class="relative transition group-hover:translate-x-1">â</span></a></div><div class="flex items-center justify-center gap-3 sm:justify-start"></div></div><div class="w-full"><div class="prose prose-sm w-full max-w-none pt-5 sm:prose-lg prose-p:text-gray-300"><p>Total TypeScript Pro Essentials is your comprehensive workshop to master the essentials of TypeScript. With over 200 lessons across 12 sections, from foundational setup to advanced techniques, conquer type-related challenges and optimize your development workflow with confidence. Whether you're starting fresh or refining your expertise, unlock the full potential of TypeScript today.</p></div></div><h4 class="pt-5 text-sm font-semibold uppercase text-gray-300">Includes</h4><div class="grid w-full grid-cols-1 gap-5 md:grid-cols-2"><a class="group flex w-full flex-row items-center gap-2" href="/workshops/typescript-pro-essentials"><img alt="TypeScript Pro Essentials" loading="lazy" width="72" height="72" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png&w=96&q=75 1x, /_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png&w=256&q=75 2x" src="/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fz9io1e0u%2Fproduction%2F80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png&w=256&q=75"/><span class="w-full leading-tight text-gray-200 transition group-hover:text-white group-hover:underline"><span data-br=":R1bb59r6:" data-brr="1" style="display:inline-block;vertical-align:top;text-decoration:inherit">TypeScript Pro Essentials</span>
1<script>self.__wrap_balancer=(t,e,n)=>{n=n||document.querySelector(`[data-br="${t}"]`);let o=n.parentElement,r=E=>n.style.maxWidth=E+"px";n.style.maxWidth="";let i=o.clientWidth,s=o.clientHeight,c=i/2,u=i,d;if(i){for(;c+1<u;)d=~~((c+u)/2),r(d),o.clientHeight==s?u=d:c=d;r(u*e+i*(1-e))}};self.__wrap_balancer(":R1bb59r6:",1)</script>
1</span></a></div><h4 class="pt-5 text-sm font-semibold uppercase text-gray-300">Features</h4><div class="grid grid-cols-1 gap-4 sm:grid-cols-2"><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Advanced-Beginner - Expert+</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>1 Self-Paced Workshops</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Interactive Exercises</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Discord Community</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Progress Tracking</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Streaming HD Video</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>English Transcripts & Subtitles</span></div><div class="flex items-center space-x-2 text-base text-gray-300"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" class="h-4 w-4 text-cyan-300"><path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path></svg> <span>Completion Certificate</span></div></div></div></div><footer class="flex items-center px-5 py-3"></footer></div></main><img aria-hidden="true" alt="" loading="lazy" decoding="async" data-nimg="fill" class="-z-10 object-contain object-top" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fbg-divider-3.11c881b0.png&w=640&q=75 640w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fbg-divider-3.11c881b0.png&w=750&q=75 750w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fbg-divider-3.11c881b0.png&w=828&q=75 828w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fbg-divider-3.11c881b0.png&w=1080&q=75 1080w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fbg-divider-3.11c881b0.png&w=1200&q=75 1200w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fbg-divider-3.11c881b0.png&w=1920&q=75 1920w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fbg-divider-3.11c881b0.png&w=2048&q=75 2048w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fbg-divider-3.11c881b0.png&w=3840&q=75 3840w" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fbg-divider-3.11c881b0.png&w=3840&q=75"/></div><footer class="relative z-10 mt-16 flex items-center justify-center border-t border-gray-800/50 bg-[#090E19] px-8 pb-24 pt-24 md:mt-0 md:pb-40 md:pt-14"><div class="mx-auto flex w-full max-w-screen-lg items-center justify-center md:items-start md:justify-between"><nav class="flex flex-row flex-wrap gap-16 md:gap-24" aria-label="footer"><div><strong class="inline-block pb-5 font-mono text-sm uppercase tracking-wide">Learn</strong><ul class="flex flex-col gap-2"><li class=""><a class="text-gray-300 transition hover:text-white" href="/books/total-typescript-essentials">Total TypeScript Book</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="/workshops">Premium Workshops</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="/tutorials">Free Tutorials</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="/tips">Tips</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="/articles">Articles</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="/concepts">Concepts</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="/search">Search</a></li></ul></div><div><strong class="inline-block pb-5 font-mono text-sm uppercase tracking-wide">About</strong><ul class="flex flex-col gap-2"><li class=""><a class="text-gray-300 transition hover:text-white text-white underline decoration-gray-600 underline-offset-4" href="/products">All Products</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="/faq">FAQ</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="/credits">Credits</a></li></ul></div><div><strong class="inline-block pb-5 font-mono text-sm uppercase tracking-wide">Tools</strong><ul class="flex flex-col gap-2"><li class=""><a class="text-gray-300 transition hover:text-white" href="/typescript-learning-path">Learning Path</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="/vscode-extension">VSCode Extension</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="/ts-reset">TS Reset</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="https://mattpocock.com/discord">Discord Server</a></li></ul></div><div><strong class="inline-block pb-5 font-mono text-sm uppercase tracking-wide">Contact</strong><ul class="flex flex-col gap-2"><li class=""><a class="text-gray-300 transition hover:text-white" href="/contact">Contact Us</a></li><li class=""><a class="text-gray-300 transition hover:text-white" href="mailto:[email protected]">Email Support</a></li></ul></div></nav><img alt="" aria-hidden="true" loading="lazy" width="180" height="168" decoding="async" data-nimg="1" class="absolute -top-20 md:static md:-mt-12" style="color:transparent" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fseal%402x.ad1843e8.png&w=256&q=100 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fseal%402x.ad1843e8.png&w=384&q=100 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fseal%402x.ad1843e8.png&w=384&q=100"/></div></footer></div></div>
1<script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"products":[{"_createdAt":"2024-06-17T20:52:38Z","_id":"235dd3a6-9ffd-4c7a-9b7a-bf35f080fa21","bonuses":[],"description":"Total TypeScript Complete Volume is a set of five full TypeScript workshops for the advanced-beginner to expert professional TypeScript programmer that wants to take their skills to the next level. This bundle includes all of the Total TypeScript self-paced workshops.","features":[{"value":"Advanced-Beginner - Expert+"},{"value":"5 Self-Paced Workshops"},{"value":"Interactive Exercises"},{"value":"Best Value âï¸"},{"value":"Discord Community"},{"value":"Progress Tracking"},{"value":"Streaming HD Video"},{"value":"English Transcripts \u0026 Subtitles"},{"value":"Completion Certificate"}],"image":{"alt":"golden chest","url":"https://res.cloudinary.com/total-typescript/image/upload/v1724417359/complete-volume_2x_vjtjuv.png"},"modules":[{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png"},"moduleType":"workshop","slug":"typescript-pro-essentials","state":"published","title":"TypeScript Pro Essentials"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/8d26aee5def2397f419bb038fd8879286fd41bda-768x768.png"},"moduleType":"workshop","slug":"type-transformations","state":"published","title":"Type Transformations"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/12ef51ed533404ccf132765c75be8b6fe600bcda-769x769.png"},"moduleType":"workshop","slug":"typescript-generics","state":"published","title":"TypeScript Generics"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/ce94d457bbfa7580dd803aaa5630a7c6ebed9fee-927x927.png"},"moduleType":"workshop","slug":"advanced-typescript-patterns","state":"published","title":"Advanced TypeScript Patterns"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/bb6a657e3e8d8a8dc4d66783d23a56797b22b882-1200x1200.png"},"moduleType":"workshop","slug":"advanced-react-with-typescript","state":"published","title":"Advanced React with TypeScript"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/46de258d27a5a4e6e4a901bcda13906bc7337b66-1118x1118.png"},"moduleType":"bonus","slug":"typescript-expert-interviews","state":"published","title":"TypeScript Expert Interviews"}],"productId":"tt_product_clxjgl7fg000108l8eifn69dt","slug":"complete-volume","state":"active","title":"TypeScript Pro Complete","type":"self-paced"},{"_createdAt":"2024-06-14T15:36:39Z","_id":"d4b83e9e-2189-400b-9cae-e86da543911a","bonuses":[],"description":"Total TypeScript Pro Essentials is your comprehensive workshop to master the essentials of TypeScript. With over 200 lessons across 12 sections, from foundational setup to advanced techniques, conquer type-related challenges and optimize your development workflow with confidence. Whether you're starting fresh or refining your expertise, unlock the full potential of TypeScript today.","features":[{"value":"Advanced-Beginner - Expert+"},{"value":"1 Self-Paced Workshops"},{"value":"Interactive Exercises"},{"value":"Discord Community"},{"value":"Progress Tracking"},{"value":"Streaming HD Video"},{"value":"English Transcripts \u0026 Subtitles"},{"value":"Completion Certificate"}],"image":{"alt":"TypeScript Pro Essentials","url":"https://cdn.sanity.io/images/z9io1e0u/production/80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png"},"modules":[{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/80da574ffbb12904f823723d5ea0a8e20add0270-1200x1200.png"},"moduleType":"workshop","slug":"typescript-pro-essentials","state":"published","title":"TypeScript Pro Essentials"}],"productId":"tt_product_clxeui5j7000008iebmqm95rz","slug":"typescript-pro-essentials","state":"active","title":"TypeScript Pro Essentials","type":"self-paced"},{"_createdAt":"2023-07-12T20:26:01Z","_id":"9db4969f-da7a-4947-a9ee-bc4cc16290cd","bonuses":[],"description":"Total TypeScript Core Volume is a set of four full TypeScript workshops for the intermediate to expert professional TypeScript programmer that wants to take their skills to the next level. This bundle also includes the Advanced React with TypeScript workshop that will give you expert-level knowledge for typing your React apps.","features":[{"value":"Intermediate - Advanced+"},{"value":"4 Self-Paced Workshops"},{"value":"Interactive Exercises"},{"value":"Best Value âï¸"},{"value":"Discord Community"},{"value":"Progress Tracking"},{"value":"Streaming HD Video"},{"value":"English Transcripts \u0026 Subtitles"},{"value":"Completion Certificate"}],"image":{"alt":"bundle","url":"https://res.cloudinary.com/total-typescript/image/upload/v1676015688/core-volume_2x_wt7jnc.png"},"modules":[{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/8d26aee5def2397f419bb038fd8879286fd41bda-768x768.png"},"moduleType":"workshop","slug":"type-transformations","state":"published","title":"Type Transformations"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/12ef51ed533404ccf132765c75be8b6fe600bcda-769x769.png"},"moduleType":"workshop","slug":"typescript-generics","state":"published","title":"TypeScript Generics"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/ce94d457bbfa7580dd803aaa5630a7c6ebed9fee-927x927.png"},"moduleType":"workshop","slug":"advanced-typescript-patterns","
1state":"published","title":"Advanced TypeScript Patterns"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/bb6a657e3e8d8a8dc4d66783d23a56797b22b882-1200x1200.png"},"moduleType":"workshop","slug":"advanced-react-with-typescript","state":"published","title":"Advanced React with TypeScript"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/46de258d27a5a4e6e4a901bcda13906bc7337b66-1118x1118.png"},"moduleType":"bonus","slug":"typescript-expert-interviews","state":"published","title":"TypeScript Expert Interviews"}],"productId":"tt_product_79434686-6437-48ac-956e-1357aba87672","slug":"core-volume-react-bundle","state":"unavailable","title":"Core Volume","type":"self-paced"},{"_createdAt":"2023-07-11T21:08:44Z","_id":"fa5efe40-940d-466e-b03f-b28aecf0f5f6","bonuses":[],"description":"Expert-level knowledge for typing your React apps with TypeScript.","features":[{"value":"Advanced+"},{"value":"1 Self-Paced Workshop"},{"value":"Interactive Exercises"},{"value":"Progress Tracking"},{"value":"English Transcripts \u0026 Subtitles"},{"value":"Streaming HD Video"},{"value":"Completion Certificate"},{"value":"Discord Community"}],"image":{"alt":"react","url":"https://res.cloudinary.com/total-typescript/image/upload/v1688709464/React_Workshop_2x_qewygi.png"},"modules":[{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/bb6a657e3e8d8a8dc4d66783d23a56797b22b882-1200x1200.png"},"moduleType":"workshop","slug":"advanced-react-with-typescript","state":"published","title":"Advanced React with TypeScript"}],"productId":"tt_product_ba3b1b80-419b-4e62-a016-5f9add17c411","slug":"advanced-react-with-typescript","state":"unavailable","title":"Advanced React with TypeScript","type":"self-paced"},{"_createdAt":"2022-11-27T11:41:15Z","_id":"c6ef4cfa-b243-4984-9282-22222e9c1c0c","bonuses":[],"description":"Total TypeScript Core Volume is a set of three full TypeScript workshops for the intermediate to expert professional TypeScript programmer that wants to take their skills to the next level. ","features":[{"value":"Intermediate - Advanced+"},{"value":"3 Self-Paced Workshops"},{"value":"149 Interactive Exercises"},{"value":"Streaming HD Video"},{"value":"Discord Community"},{"value":"English Transcripts \u0026 Subtitles"},{"value":"Progress Tracking"},{"value":"Completion Certificate"}],"image":{"alt":null,"url":"https://res.cloudinary.com/total-typescript/image/upload/v1676015688/core-volume_2x_wt7jnc.png"},"modules":[{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/8d26aee5def2397f419bb038fd8879286fd41bda-768x768.png"},"moduleType":"workshop","slug":"type-transformations","state":"published","title":"Type Transformations"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/12ef51ed533404ccf132765c75be8b6fe600bcda-769x769.png"},"moduleType":"workshop","slug":"typescript-generics","state":"published","title":"TypeScript Generics"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/ce94d457bbfa7580dd803aaa5630a7c6ebed9fee-927x927.png"},"moduleType":"workshop","slug":"advanced-typescript-patterns","state":"published","title":"Advanced TypeScript Patterns"},{"image":{"url":"https://cdn.sanity.io/images/z9io1e0u/production/46de258d27a5a4e6e4a901bcda13906bc7337b66-1118x1118.png"},"moduleType":"bonus","slug":"typescript-expert-interviews","state":"published","title":"TypeScript Expert Interviews"}],"productId":"tt_00c02ac7-6f95-4ad4-8aac-999b243df6c1","slug":"core-volume","state":"unavailable","title":"Legacy Core Volume (v1)","type":"self-paced"}],"allowPurchase":true},"__N_SSP":true},"page":"/products","query":{},"buildId":"m3oAlgIZjHURYbYeCaJmd","isFallback":false,"isExperimentalCompile":false,"gssp":true,"scriptLoader":[]}</script>
1</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.