{"id":774,"date":"2025-08-18T21:27:38","date_gmt":"2025-08-19T03:27:38","guid":{"rendered":"https:\/\/kop.lat\/blog\/?p=774"},"modified":"2025-08-18T21:27:39","modified_gmt":"2025-08-19T03:27:39","slug":"built-in-utility-types-in-typescript","status":"publish","type":"post","link":"https:\/\/kop.lat\/blog\/built-in-utility-types-in-typescript\/","title":{"rendered":"Built-in utility types in Typescript"},"content":{"rendered":"\n<p>Comprehensive list of <strong>built-in utility types<\/strong> in TypeScript with a brief descriptio and examples for each:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>TypeScript&#8217;s Built-in Utility Types<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1. <code>Partial&lt;Type&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Makes all properties of <code>Type<\/code> optional.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface User { name: string; age: number; }\ntype PartialUser = Partial&lt;User&gt;; \/\/ { name?: string; age?: number }<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2. <code>Required&lt;Type&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Makes all properties of <code>Type<\/code> required (opposite of <code>Partial<\/code>).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type RequiredUser = Required&lt;PartialUser&gt;; \/\/ { name: string; age: number }<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3. <code>Readonly&lt;Type&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Makes all properties of <code>Type<\/code> read-only.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type ReadonlyUser = Readonly&lt;User&gt;; \/\/ { readonly name: string; readonly age: number }<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>4. <code>Record&lt;Keys, Type&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Creates an object type with keys from <code>Keys<\/code> and values of <code>Type<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type UserMap = Record&lt;string, User&gt;; \/\/ { &#91;key: string]: User }<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>5. <code>Pick&lt;Type, Keys&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Selects a subset of properties from <code>Type<\/code> using <code>Keys<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type UserName = Pick&lt;User, 'name'&gt;; \/\/ { name: string }<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>6. <code>Omit&lt;Type, Keys&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Removes properties <code>Keys<\/code> from <code>Type<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type AgelessUser = Omit&lt;User, 'age'&gt;; \/\/ { name: string }<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>7. <code>Exclude&lt;UnionType, ExcludedMembers&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Removes types from a union.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type T = Exclude&lt;'a' | 'b' | 'c', 'a'&gt;; \/\/ 'b' | 'c'<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>8. <code>Extract&lt;UnionType, ExtractableMembers&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Keeps only the assignable types in a union.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type T = Extract&lt;'a' | 'b' | 1, string&gt;; \/\/ 'a' | 'b'<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>9. <code>NonNullable&lt;Type&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Removes <code>null<\/code> and <code>undefined<\/code> from <code>Type<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type T = NonNullable&lt;string | null | undefined&gt;; \/\/ string<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>10. <code>Parameters&lt;FunctionType&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Extracts parameter types of a function as a tuple.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type FnParams = Parameters&lt;(x: number, y: string) =&gt; void&gt;; \/\/ &#91;x: number, y: string]<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>11. <code>ReturnType&lt;FunctionType&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Extracts the return type of a function.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type FnReturn = ReturnType&lt;() =&gt; number&gt;; \/\/ number<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>12. <code>ConstructorParameters&lt;ClassType&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Extracts constructor parameter types as a tuple.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Cat { constructor(name: string, age: number) {} }\ntype CatParams = ConstructorParameters&lt;typeof Cat&gt;; \/\/ &#91;name: string, age: number]<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>13. <code>InstanceType&lt;ClassType&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Extracts the instance type of a class constructor.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type CatInstance = InstanceType&lt;typeof Cat&gt;; \/\/ Cat<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>14. <code>ThisParameterType&lt;FunctionType&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Extracts the <code>this<\/code> parameter type of a function.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function fn(this: { x: number }) {}\ntype ThisType = ThisParameterType&lt;typeof fn&gt;; \/\/ { x: number }<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>15. <code>OmitThisParameter&lt;FunctionType&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Removes the <code>this<\/code> parameter from a function type.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type NoThisFn = OmitThisParameter&lt;typeof fn&gt;; \/\/ () =&gt; void<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>16. <code>Awaited&lt;Type&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Unwraps <code>Promise<\/code> return types (useful for async functions).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type T = Awaited&lt;Promise&lt;string&gt;&gt;; \/\/ string<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>17. <code>Uppercase&lt;StringType&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Transforms string literal types to uppercase.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type Greeting = Uppercase&lt;'hello'&gt;; \/\/ \"HELLO\"<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>18. <code>Lowercase&lt;StringType&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Transforms string literal types to lowercase.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type QuietGreeting = Lowercase&lt;'HELLO'&gt;; \/\/ \"hello\"<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>19. <code>Capitalize&lt;StringType&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Capitalizes the first letter of a string literal.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type Name = Capitalize&lt;'alice'&gt;; \/\/ \"Alice\"<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>20. <code>Uncapitalize&lt;StringType&gt;<\/code><\/strong><\/h4>\n\n\n\n<p>Uncapitalizes the first letter of a string literal.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type InformalName = Uncapitalize&lt;'Alice'&gt;; \/\/ \"alice\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Key Takeaways<\/strong><\/h3>\n\n\n\n<ol>\n<li><strong>Transformation Utilities<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul>\n<li>Modify existing types (<code>Partial<\/code>, <code>Readonly<\/code>, <code>Pick<\/code>, <code>Omit<\/code>).<\/li>\n<\/ul>\n\n\n\n<ol>\n<li><strong>Type Extraction<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul>\n<li>Get function\/constructor parameters (<code>Parameters<\/code>, <code>ConstructorParameters<\/code>).<\/li>\n\n\n\n<li>Extract return types (<code>ReturnType<\/code>, <code>Awaited<\/code>).<\/li>\n<\/ul>\n\n\n\n<ol>\n<li><strong>String Manipulation<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul>\n<li>Change string literal casing (<code>Uppercase<\/code>, <code>Capitalize<\/code>, etc.).<\/li>\n<\/ul>\n\n\n\n<ol>\n<li><strong>Advanced Use Cases<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul>\n<li><code>Record<\/code> for dictionary types, <code>NonNullable<\/code> for strict null checks.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example: Combining Utilities<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Create a read-only subset of an API response\ntype ApiResponse = {\n  id: number;\n  name: string;\n  email?: string;\n};\n\ntype SafeResponse = Readonly&lt;Pick&lt;ApiResponse, 'id' | 'name'&gt;&gt;;\n\/\/ { readonly id: number; readonly name: string }<\/code><\/pre>\n\n\n\n<p>These utilities help write <strong>type-safe, maintainable code<\/strong> with minimal boilerplate. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comprehensive list of built-in utility types in TypeScript with a brief descriptio and examples for each: TypeScript&#8217;s Built-in Utility Types 1. Partial&lt;Type&gt; Makes all properties of Type optional. 2. Required&lt;Type&gt; Makes all properties of Type required (opposite of Partial). 3. Readonly&lt;Type&gt; Makes all properties of Type read-only. 4. Record&lt;Keys, Type&gt; Creates an object type with [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":232,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[49],"tags":[23,63],"_links":{"self":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts\/774"}],"collection":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/comments?post=774"}],"version-history":[{"count":1,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts\/774\/revisions"}],"predecessor-version":[{"id":775,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/posts\/774\/revisions\/775"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/media\/232"}],"wp:attachment":[{"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/media?parent=774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/categories?post=774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kop.lat\/blog\/wp-json\/wp\/v2\/tags?post=774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}