{"id":39271,"date":"2025-11-14T13:13:59","date_gmt":"2025-11-14T21:13:59","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=39271"},"modified":"2025-11-14T13:14:00","modified_gmt":"2025-11-14T21:14:00","slug":"what-is-typescript-and-how-is-it-related-to-javascript","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/","title":{"rendered":"What is TypeScript, and how is it related to JavaScript?"},"content":{"rendered":"\n<p>If you build for the web, you have probably seen TypeScript questions pop up in team chats and forums. Some developers love the functionality it offers, others worry it will slow them down.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Question:<\/h2>\n\n\n\n<p><em>What is TypeScript, and how is it related to JavaScript? Is it just a different language or a set of build-time checks? How do I adopt it incrementally in an existing JS codebase, and what are the benefits and tradeoffs for front-end apps and Node services?<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Answer:<\/h2>\n\n\n\n<p>TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. You write modern JS plus optional static types, then the TypeScript compiler erases those types and emits standards-compliant JS that runs anywhere JS runs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How TypeScript relates to JavaScript<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Every valid JavaScript program is valid TypeScript. You can start with .js files and add types gradually.<\/li>\n\n\n\n<li>Types are checked at build time, not at runtime. Your output is normal JS.<\/li>\n\n\n\n<li>TS tracks things JS tools cannot, like nullability, union types, and generic constraints, which helps catch bugs earlier.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Why teams adopt TypeScript<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fewer runtime bugs due to static checks and better IDE autocomplete.<\/li>\n\n\n\n<li>Safer refactors at scale with real type guarantees.<\/li>\n\n\n\n<li>Self-documenting code through interfaces and type aliases.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Quick example<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-comment\">\/\/ JavaScript<\/span>\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">add<\/span>(<span class=\"hljs-params\">a, b<\/span>) <\/span>{ <span class=\"hljs-keyword\">return<\/span> a + b; }\n<span class=\"hljs-built_in\">console<\/span>.log(add(<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-string\">\"2\"<\/span>)); <span class=\"hljs-comment\">\/\/ \"12\" string concatenation<\/span>\n\n<span class=\"hljs-comment\">\/\/ TypeScript<\/span>\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">addTS<\/span>(<span class=\"hljs-params\">a: number, b: number<\/span>): <span class=\"hljs-title\">number<\/span> <\/span>{\n\u00a0 <span class=\"hljs-keyword\">return<\/span> a + b;\n}\n<span class=\"hljs-comment\">\/\/ addTS(1, \"2\"); \/\/ Compile error: string is not assignable to number<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Core TypeScript features in practice<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">interface User {\n\u00a0 <span class=\"hljs-attr\">id<\/span>: string;\n\u00a0 name: string;\n\u00a0 photoUrl?: string; <span class=\"hljs-comment\">\/\/ optional<\/span>\n}\n\n<span class=\"hljs-keyword\">const<\/span> u: User = { <span class=\"hljs-attr\">id<\/span>: <span class=\"hljs-string\">\"1\"<\/span>, <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"Ada\"<\/span> };\n\ntype Result&lt;T&gt; = { <span class=\"hljs-attr\">ok<\/span>: <span class=\"hljs-literal\">true<\/span>; value: T } | { <span class=\"hljs-attr\">ok<\/span>: <span class=\"hljs-literal\">false<\/span>; error: string };\n\n<span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">fetchJson<\/span>&lt;<span class=\"hljs-title\">T<\/span>&gt;(<span class=\"hljs-params\">url: string<\/span>): <span class=\"hljs-title\">Promise<\/span>&lt;<span class=\"hljs-title\">Result<\/span>&lt;<span class=\"hljs-title\">T<\/span>&gt;&gt; <\/span>{\n\u00a0 <span class=\"hljs-keyword\">const<\/span> res = <span class=\"hljs-keyword\">await<\/span> fetch(url);\n\u00a0 <span class=\"hljs-keyword\">if<\/span> (!res.ok) <span class=\"hljs-keyword\">return<\/span> { <span class=\"hljs-attr\">ok<\/span>: <span class=\"hljs-literal\">false<\/span>, <span class=\"hljs-attr\">error<\/span>: res.statusText };\n\u00a0 <span class=\"hljs-keyword\">return<\/span> { <span class=\"hljs-attr\">ok<\/span>: <span class=\"hljs-literal\">true<\/span>, <span class=\"hljs-attr\">value<\/span>: <span class=\"hljs-keyword\">await<\/span> res.json() <span class=\"hljs-keyword\">as<\/span> T };\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Getting started in an existing JS repo<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Install TypeScript: <code>npm i -D typescript<\/code><\/li>\n\n\n\n<li>Init config: <code>npx tsc --init<\/code><\/li>\n\n\n\n<li>Enable incremental adoption in tsconfig:<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json shcb-wrap-lines\">{\n\u00a0 <span class=\"hljs-attr\">\"compilerOptions\"<\/span>: {\n\u00a0 \u00a0 <span class=\"hljs-attr\">\"target\"<\/span>: <span class=\"hljs-string\">\"ES2020\"<\/span>,\n\u00a0 \u00a0 <span class=\"hljs-attr\">\"module\"<\/span>: <span class=\"hljs-string\">\"ESNext\"<\/span>,\n\u00a0 \u00a0 <span class=\"hljs-attr\">\"strict\"<\/span>: <span class=\"hljs-literal\">true<\/span>,\n\u00a0 \u00a0 <span class=\"hljs-attr\">\"allowJs\"<\/span>: <span class=\"hljs-literal\">true<\/span>,\n\u00a0 \u00a0 <span class=\"hljs-attr\">\"checkJs\"<\/span>: <span class=\"hljs-literal\">false<\/span>,\n\u00a0 \u00a0 <span class=\"hljs-attr\">\"esModuleInterop\"<\/span>: <span class=\"hljs-literal\">true<\/span>,\n\u00a0 \u00a0 <span class=\"hljs-attr\">\"skipLibCheck\"<\/span>: <span class=\"hljs-literal\">true<\/span>\n\u00a0 },\n\u00a0 <span class=\"hljs-attr\">\"include\"<\/span>: &#91;<span class=\"hljs-string\">\"src\"<\/span>]\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Rename files you care about to .ts or .tsx one folder at a time.<\/li>\n\n\n\n<li>Use <code>npm i -D @types\/node<\/code> and other <code>@types<\/code> packages for libraries that do not ship types.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Interop tips<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Keep <code>allowJs<\/code> on while migrating. You can still type-check JS via JSDoc if desired.<\/li>\n\n\n\n<li>Let your bundler or framework handle compilation. Most setups like Vite, Next.js, and ts-node integrate well.<\/li>\n\n\n\n<li>Run <code>tsc --noEmit<\/code> in CI to enforce type safety without building artifacts twice.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Front-end and Node specifics<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Front-end:<\/strong> TS shines with React and Vue via typed props, hooks, and store models. It also helps when dealing with asset URLs, responsive images, and format negotiation.<\/li>\n\n\n\n<li><strong>Node:<\/strong> Strong types for configs, environment variables, and API contracts reduce runtime surprises.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Media handling example with TypeScript<\/h3>\n\n\n\n<p>Apps often pipe dynamic media into components. You can model this with types and keep delivery concerns clean, for example by standardizing an <a href=\"https:\/\/cloudinary.com\/glossary\/image-url\">image URL<\/a> contract or adopting modern formats for better performance.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How Cloudinary can fit into a TypeScript workflow<\/h3>\n\n\n\n<p>After you have the generic approach in place, you can leverage Cloudinary for typed, URL-based transformations and delivery without reinventing media pipelines. Our <a href=\"https:\/\/cloudinary.com\/documentation\/node_integration\">Node.js SDK<\/a> already works nicely with TS out of the box.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">import<\/span> { Cloudinary } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@cloudinary\/url-gen\"<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { fill } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@cloudinary\/url-gen\/actions\/resize\"<\/span>;\n\n<span class=\"hljs-keyword\">const<\/span> cld = <span class=\"hljs-keyword\">new<\/span> Cloudinary({ <span class=\"hljs-attr\">cloud<\/span>: { <span class=\"hljs-attr\">cloudName<\/span>: <span class=\"hljs-string\">\"demo\"<\/span> } });\n\n<span class=\"hljs-keyword\">const<\/span> img = cld\n\u00a0 .image(<span class=\"hljs-string\">\"samples\/landscapes\/beach\"<\/span>)\n\u00a0 .format(<span class=\"hljs-string\">\"auto\"<\/span>)\u00a0 <span class=\"hljs-comment\">\/\/ serve optimal format<\/span>\n\u00a0 .quality(<span class=\"hljs-string\">\"auto\"<\/span>) <span class=\"hljs-comment\">\/\/ smart quality<\/span>\n\u00a0 .resize(fill().width(<span class=\"hljs-number\">800<\/span>).height(<span class=\"hljs-number\">600<\/span>));\n\n<span class=\"hljs-keyword\">const<\/span> url: string = img.toURL(); <span class=\"hljs-comment\">\/\/ typed string<\/span>\n<span class=\"hljs-comment\">\/\/ Use in your components<\/span>\n<span class=\"hljs-built_in\">document<\/span>.getElementById(<span class=\"hljs-string\">\"hero\"<\/span>)?.setAttribute(<span class=\"hljs-string\">\"src\"<\/span>, url);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>On the server you can upload assets from Node with TypeScript as well:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">import<\/span> { v2 <span class=\"hljs-keyword\">as<\/span> cloudinary } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"cloudinary\"<\/span>;\n\ncloudinary.config({\n\u00a0 <span class=\"hljs-attr\">cloud_name<\/span>: process.env.CLOUDINARY_CLOUD_NAME!,\n\u00a0 <span class=\"hljs-attr\">api_key<\/span>: process.env.CLOUDINARY_API_KEY!,\n\u00a0 <span class=\"hljs-attr\">api_secret<\/span>: process.env.CLOUDINARY_API_SECRET!\n});\n\n<span class=\"hljs-keyword\">await<\/span> cloudinary.uploader.upload(<span class=\"hljs-string\">\"local\/path.jpg\"<\/span>, { <span class=\"hljs-attr\">folder<\/span>: <span class=\"hljs-string\">\"profiles\"<\/span> });<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Performance note<\/h3>\n\n\n\n<p>TypeScript does not change runtime performance by itself, but typed code often makes it easier to enforce consistent media strategies like responsive image sets and format negotiation, which improves page speed and UX. If performance is a priority across your stack, check out <a href=\"https:\/\/cloudinary.com\/guides\/web-performance\/what-is-an-optimized-website-and-6-ways-to-optimize-yours\">what makes an optimized website<\/a> first.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">TL;DR<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>TypeScript is JavaScript with types that compile down to plain JS.<\/li>\n\n\n\n<li>Adopt it incrementally with <code>allowJs<\/code>, add types where they pay off, and enforce <code>tsc --noEmit<\/code> in CI.<\/li>\n\n\n\n<li>Use types to model media URLs and formats, and consider tools that streamline delivery.<\/li>\n\n\n\n<li>Cloudinary pairs well with TypeScript by providing typed URL generation, uploads, and optimized delivery.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Learn More<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cloudinary.com\/tools\/png-to-webp\">PNG to WebP Converter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/tools\/image-upscale\">Image Upscaling and Quality Enhancement<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/guides\/video\/video-as-a-service\">Video as a Service<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cloudinary.com\/guides\/digital-asset-management\/digital-asset-management\">Digital Asset Management Guide<\/a><\/li>\n<\/ul>\n\n\n\n<p>Ready to build faster with great media delivery and type-safe code? <a href=\"https:\/\/cloudinary.com\/users\/register_free\">Register for a free Cloudinary account<\/a> and start optimizing today.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you build for the web, you have probably seen TypeScript questions pop up in team chats and forums. Some developers love the functionality it offers, others worry it will slow them down. Question: What is TypeScript, and how is it related to JavaScript? Is it just a different language or a set of build-time [&hellip;]<\/p>\n","protected":false},"author":88,"featured_media":39267,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[423],"class_list":["post-39271","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-questions"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>What is TypeScript, and how is it related to JavaScript?<\/title>\n<meta name=\"description\" content=\"If you build for the web, you have probably seen TypeScript questions pop up in team chats and forums. Some developers love the functionality it offers,\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What is TypeScript, and how is it related to JavaScript?\" \/>\n<meta property=\"og:description\" content=\"If you build for the web, you have probably seen TypeScript questions pop up in team chats and forums. Some developers love the functionality it offers,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-14T21:13:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-14T21:14:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1999\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"damjanantevski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/\"},\"author\":{\"name\":\"damjanantevski\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e\"},\"headline\":\"What is TypeScript, and how is it related to JavaScript?\",\"datePublished\":\"2025-11-14T21:13:59+00:00\",\"dateModified\":\"2025-11-14T21:14:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/\"},\"wordCount\":587,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA\",\"keywords\":[\"Questions\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/\",\"url\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/\",\"name\":\"What is TypeScript, and how is it related to JavaScript?\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA\",\"datePublished\":\"2025-11-14T21:13:59+00:00\",\"dateModified\":\"2025-11-14T21:14:00+00:00\",\"description\":\"If you build for the web, you have probably seen TypeScript questions pop up in team chats and forums. Some developers love the functionality it offers,\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA\",\"width\":1999,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What is TypeScript, and how is it related to JavaScript?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e\",\"name\":\"damjanantevski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g\",\"caption\":\"damjanantevski\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"What is TypeScript, and how is it related to JavaScript?","description":"If you build for the web, you have probably seen TypeScript questions pop up in team chats and forums. Some developers love the functionality it offers,","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/","og_locale":"en_US","og_type":"article","og_title":"What is TypeScript, and how is it related to JavaScript?","og_description":"If you build for the web, you have probably seen TypeScript questions pop up in team chats and forums. Some developers love the functionality it offers,","og_url":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/","og_site_name":"Cloudinary Blog","article_published_time":"2025-11-14T21:13:59+00:00","article_modified_time":"2025-11-14T21:14:00+00:00","og_image":[{"width":1999,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","type":"image\/jpeg"}],"author":"damjanantevski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/"},"author":{"name":"damjanantevski","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e"},"headline":"What is TypeScript, and how is it related to JavaScript?","datePublished":"2025-11-14T21:13:59+00:00","dateModified":"2025-11-14T21:14:00+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/"},"wordCount":587,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","keywords":["Questions"],"inLanguage":"en-US","copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/","url":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/","name":"What is TypeScript, and how is it related to JavaScript?","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","datePublished":"2025-11-14T21:13:59+00:00","dateModified":"2025-11-14T21:14:00+00:00","description":"If you build for the web, you have probably seen TypeScript questions pop up in team chats and forums. Some developers love the functionality it offers,","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","width":1999,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/questions\/what-is-typescript-and-how-is-it-related-to-javascript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"What is TypeScript, and how is it related to JavaScript?"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/43592e43c12520a1e867d456b1e8cf7e","name":"damjanantevski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3b40c995531fe4d510212a06c9d4fc666d2cb8efbfebc98a94191701accf4817?s=96&d=mm&r=g","caption":"damjanantevski"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1763149247\/QA_javascript_featured_image\/QA_javascript_featured_image.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/88"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=39271"}],"version-history":[{"count":1,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39271\/revisions"}],"predecessor-version":[{"id":39272,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/39271\/revisions\/39272"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/39267"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=39271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=39271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=39271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}