{"id":5694,"date":"2025-11-23T17:00:52","date_gmt":"2025-11-23T13:30:52","guid":{"rendered":"https:\/\/parmin.cloud\/blog\/?p=5694"},"modified":"2025-11-23T17:00:52","modified_gmt":"2025-11-23T13:30:52","slug":"%da%86%da%af%d9%88%d9%86%d9%87-%d8%a7%d8%b2-%d8%ac%d9%86%d8%b1%db%8c%da%a9%d9%87%d8%a7-%d8%af%d8%b1-typescript-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%da%a9%d9%86%db%8c%d9%85%d8%9f","status":"publish","type":"post","link":"https:\/\/parmin.cloud\/blog\/%da%86%da%af%d9%88%d9%86%d9%87-%d8%a7%d8%b2-%d8%ac%d9%86%d8%b1%db%8c%da%a9%d9%87%d8%a7-%d8%af%d8%b1-typescript-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%da%a9%d9%86%db%8c%d9%85%d8%9f\/","title":{"rendered":"\u0686\u06af\u0648\u0646\u0647 \u0627\u0632 \u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u062f\u0631 TypeScript \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u061f"},"content":{"rendered":"<h3>\u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u062f\u0631 \u062a\u0627\u06cc\u067e\u200c\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a<\/h3>\n<p>\u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u06cc\u06a9\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0627\u0633\u0627\u0633\u06cc \u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0646\u0648\u0639 \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u062a\u0627 \u0646\u0648\u0639\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0628\u0647 \u06cc\u06a9 \u0646\u0648\u0639\u060c \u062a\u0627\u0628\u0639 \u06cc\u0627 \u0633\u0627\u062e\u062a\u0627\u0631\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0646\u062f. \u0648\u0642\u062a\u06cc \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a\u06cc \u062c\u0646\u0631\u06cc\u06a9 \u0634\u0648\u062f\u060c \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u062a\u0627\u06cc\u067e\u200c\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0639\u0645\u0627\u0644 \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0627\u0639\u062b \u0627\u0646\u0639\u0637\u0627\u0641\u200c\u067e\u0630\u06cc\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631 \u06a9\u062f\u060c \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0648 \u06a9\u0627\u0647\u0634 \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n<p>\u062a\u0627\u06cc\u067e\u200c\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0632 \u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0645\u0644 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u062a\u0627 \u0646\u0648\u0639\u200c\u0647\u0627\u06cc \u0627\u06cc\u0645\u0646\u200c\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u06cc\u0627 \u0645\u0642\u062f\u0627\u0631 \u0628\u0627\u0632\u06af\u0634\u062a\u06cc \u0628\u0627 \u0646\u0648\u0639 \u0646\u0627\u0645\u0634\u062e\u0635 \u062f\u0627\u0631\u0646\u062f\u060c \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u0628\u0627 \u0645\u062b\u0627\u0644\u200c\u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0627\u0632 \u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u062f\u0631 \u062a\u0648\u0627\u0628\u0639\u060c \u062a\u0627\u06cc\u067e\u200c\u0647\u0627\u060c \u06a9\u0644\u0627\u0633\u200c\u0647\u0627 \u0648 \u0627\u06cc\u0646\u062a\u0631\u0641\u06cc\u0633\u200c\u0647\u0627 \u0622\u0634\u0646\u0627 \u0645\u06cc\u200c\u0634\u0648\u06cc\u062f \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627\u060c \u0646\u0648\u0639\u200c\u0647\u0627\u06cc \u0645\u067e\u200c\u0634\u062f\u0647 \u0648 \u0645\u0634\u0631\u0648\u0637 \u0633\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u062f\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a\u200c\u0647\u0627\u06cc \u0645\u0646\u0639\u0637\u0641 \u0648 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f.<\/p>\n<h3>\u067e\u06cc\u0634\u200c\u0646\u06cc\u0627\u0632 \u0622\u0645\u0648\u0632\u0634<\/h3>\n<p>\u062a\u0645\u0627\u0645 \u0645\u062b\u0627\u0644\u200c\u0647\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0646\u0633\u062e\u0647 4.2.3 \u062a\u0627\u06cc\u067e\u200c\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647\u200c\u0627\u0646\u062f.<\/p>\n<h3>\u0646\u062d\u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627<\/h3>\n<p>\u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u062f\u0631 \u062a\u0627\u06cc\u067e\u200c\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062f\u0627\u062e\u0644 \u067e\u0631\u0627\u0646\u062a\u0632 \u0632\u0627\u0648\u06cc\u0647\u200c\u062f\u0627\u0631 \u0628\u0647 \u0634\u06a9\u0644 &lt;T&gt; \u0646\u0648\u0634\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f \u06a9\u0647 T \u0646\u0645\u0627\u06cc\u0627\u0646\u06af\u0631 \u0646\u0648\u0639 \u067e\u0627\u0633 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a. T \u0647\u0645\u0627\u0646\u0646\u062f \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u062a\u0648\u0627\u0628\u0639 \u06cc\u06a9 \u062c\u0627\u06cc\u200c\u062e\u0627\u0644\u06cc \u0628\u0631\u0627\u06cc \u0646\u0648\u0639 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u0633\u0627\u062e\u062a \u0646\u0645\u0648\u0646\u0647 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u0634\u0648\u062f. \u0686\u0646\u062f\u06cc\u0646 \u0646\u0648\u0639 \u062c\u0646\u0631\u06cc\u06a9 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0637\u0648\u0631 \u0647\u0645\u0632\u0645\u0627\u0646 \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u0646\u062f\u060c \u0645\u0627\u0646\u0646\u062f &lt;T, K, A&gt;.<\/p>\n<p>\u062a\u0648\u062c\u0647: \u0628\u0647 \u0637\u0648\u0631 \u0631\u0627\u06cc\u062c \u0627\u0632 \u06cc\u06a9 \u062d\u0631\u0641 \u0628\u0631\u0627\u06cc \u0646\u0627\u0645 \u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0647\u0631\u0686\u0646\u062f \u0627\u06cc\u0646 \u06cc\u06a9 \u0642\u0627\u0646\u0648\u0646 \u0646\u06cc\u0633\u062a.<\/p>\n<h3>\u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u0628\u0627 \u062a\u0627\u0628\u0639<\/h3>\n<p>\u062a\u0627\u0628\u0639\u06cc \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0647 \u062f\u0648 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f: \u06cc\u06a9 \u0634\u06cc\u0621 \u0648 \u0622\u0631\u0627\u06cc\u0647\u200c\u0627\u06cc \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u060c \u0648 \u06cc\u06a9 \u0634\u06cc\u0621 \u062c\u062f\u06cc\u062f \u0628\u0627 \u062a\u0646\u0647\u0627 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062f\u0644\u062e\u0648\u0627\u0647 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f:<\/p>\n<pre><code>function pickObjectKeys(obj, keys) {\r\n  const newObj = {};\r\n\r\n  keys.forEach((key) =&gt; {\r\n    newObj[key] = obj[key];\r\n  });\r\n  return newObj;\r\n}\r\n<\/code><\/pre>\n<p>\u0645\u062b\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0627\u0628\u0639:<\/p>\n<pre><code>const language = {\r\n  name: \"TypeScript\",\r\n  age: 10,\r\n  extensions: [\"ts\", \"tsx\"],\r\n};\r\n\r\nconst ageAndExtensions = pickObjectKeys(language, [\"age\", \"extensions\"]);\r\n<\/code><\/pre>\n<p>\u0646\u062a\u06cc\u062c\u0647:<\/p>\n<pre><code>{\r\n  age: 10,\r\n  extensions: [\"ts\", \"tsx\"],\r\n}\r\n<\/code><\/pre>\n<p>\u0628\u0631\u0627\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0628\u0647 \u062a\u0627\u06cc\u067e\u200c\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0646\u0648\u0639\u060c \u0627\u0632 \u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:<\/p>\n<pre><code>function pickObjectKeys&lt;T extends object, K extends keyof T&gt;(\r\n  obj: T,\r\n  keys: K[]\r\n): Pick&lt;T, K&gt; {\r\n  const newObj = {} as Pick&lt;T, K&gt;;\r\n  keys.forEach((key) =&gt; {\r\n    newObj[key] = obj[key];\r\n  });\r\n  return newObj;\r\n}\r\n<\/code><\/pre>\n<p><code>&lt;T, K extends keyof T&gt;<\/code> \u062f\u0648 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0646\u0648\u0639 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f. K \u0645\u062d\u062f\u0648\u062f \u0628\u0647 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc T \u0627\u0633\u062a. \u0622\u0631\u06af\u0648\u0645\u0627\u0646\u200c\u0647\u0627 \u0648 \u0645\u0642\u062f\u0627\u0631 \u0628\u0627\u0632\u06af\u0634\u062a\u06cc \u062a\u0627\u0628\u0639 \u0628\u0627 \u0627\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641 \u0645\u0646\u0637\u0628\u0642 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f. \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f IDE \u0645\u062b\u0644 Visual Studio Code \u0647\u0646\u06af\u0627\u0645 \u062a\u0627\u06cc\u067e \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0647\u0627\u06cc \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0627\u06cc \u06a9\u0644\u06cc\u062f\u0647\u0627 \u0628\u062f\u0647\u062f.<\/p>\n<h3>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062c\u0646\u0631\u06cc\u06a9 \u062f\u0631 \u062a\u0648\u0627\u0628\u0639<\/h3>\n<p>\u062a\u0627\u0628\u0639 identity \u06a9\u0647 \u0645\u0642\u062f\u0627\u0631\u06cc \u0631\u0627 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f \u0648 \u0647\u0645\u0627\u0646 \u0631\u0627 \u0628\u0627\u0632 \u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f:<\/p>\n<pre><code>function identity&lt;T&gt;(arg: T): T {\r\n  return arg;\r\n}\r\n<\/code><\/pre>\n<p>\u062f\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647:<\/p>\n<pre><code>const result = identity(123);\r\n<\/code><\/pre>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 <code>result<\/code> \u062a\u0627\u06cc\u067e <code>123<\/code> (\u0639\u062f\u062f \u0644\u06cc\u062a\u06cc\u0631\u0627) \u062f\u0627\u0631\u062f \u06a9\u0647 \u0627\u0632 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0646\u062a\u06cc\u062c\u0647 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0635\u0631\u06cc\u062d \u0646\u0648\u0639 \u0631\u0627 \u062a\u0639\u06cc\u06cc\u0646 \u06a9\u0631\u062f:<\/p>\n<pre><code>const result = identity&lt;number&gt;(123);\r\n<\/code><\/pre>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0646\u0648\u0639\u200c\u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0647\u0645 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a:<\/p>\n<pre><code>type ProgrammingLanguage = { name: string; };\r\n\r\nconst result = identity&lt;ProgrammingLanguage&gt;({ name: \"TypeScript\" });\r\n<\/code><\/pre>\n<h3>\u062a\u0648\u0627\u0628\u0639 async \u0648 \u062c\u0646\u0631\u06cc\u06a9<\/h3>\n<p>\u062a\u0627\u0628\u0639\u06cc \u0628\u0631\u0627\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc API \u0628\u0627 \u062c\u0646\u0631\u06cc\u06a9:<\/p>\n<pre><code>async function fetchApi&lt;ResultType&gt;(url: string): Promise&lt;ResultType&gt; {\r\n  const response = await fetch(url);\r\n  return response.json();\r\n}\r\n<\/code><\/pre>\n<p>\u0686\u0648\u0646 \u062c\u0646\u0631\u06cc\u06a9 \u062f\u0631 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u062f\u0631\u062c \u0646\u0634\u062f\u0647\u060c \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u0646\u062f\u0647 <code>fetchApi<\/code> \u0628\u0627\u06cc\u062f \u0646\u0648\u0639 \u0631\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u062f:<\/p>\n<pre><code>type User = { id: number; name: string; };\r\n\r\nconst data = await fetchApi&lt;User[]&gt;(\"\/users\");\r\n<\/code><\/pre>\n<p>\u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0628\u0647 \u062c\u0646\u0631\u06cc\u06a9 \u0645\u0642\u062f\u0627\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0647\u0645 \u062f\u0627\u062f\u060c \u0645\u062b\u0644:<\/p>\n<pre><code>async function fetchApi&lt;ResultType = Record&lt;string, any&gt;&gt;(url: string): Promise&lt;ResultType&gt;\r\n<\/code><\/pre>\n<h3>\u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u0646\u0648\u0639 \u062c\u0646\u0631\u06cc\u06a9 \u0628\u0627 extends<\/h3>\n<p>\u062a\u0627\u0628\u0639\u06cc \u06a9\u0647 \u0647\u0645\u0647 \u0645\u0642\u062f\u0627\u0631\u0647\u0627\u06cc \u0634\u06cc\u0621 \u0631\u0627 \u0628\u0647 \u0631\u0634\u062a\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n<pre><code>function stringifyObjectKeyValues&lt;T extends Record&lt;string, any&gt;&gt;(obj: T): { [K in keyof T]: string } {\r\n  return Object.keys(obj).reduce((acc, key) =&gt; {\r\n    acc[key as keyof T] = String(obj[key as keyof T]);\r\n    return acc;\r\n  }, {} as { [K in keyof T]: string });\r\n}\r\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646\u062c\u0627 <code>T extends Record&lt;string, any&gt;<\/code> \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 <code>obj<\/code> \u06cc\u06a9 \u0634\u06cc\u0621 \u0628\u0627\u0634\u062f.<\/p>\n<h3>\u062c\u0646\u0631\u06cc\u06a9 \u062f\u0631 \u0627\u06cc\u0646\u062a\u0631\u0641\u06cc\u0633\u200c\u0647\u0627 \u0648 \u06a9\u0644\u0627\u0633\u200c\u0647\u0627<\/h3>\n<p>\u0627\u06cc\u062c\u0627\u062f \u0627\u06cc\u0646\u062a\u0631\u0641\u06cc\u0633 \u062c\u0646\u0631\u06cc\u06a9:<\/p>\n<pre><code>interface ApiResponse&lt;T&gt; {\r\n  data: T;\r\n}\r\n<\/code><\/pre>\n<p>\u06a9\u0644\u0627\u0633 \u062c\u0646\u0631\u06cc\u06a9:<\/p>\n<pre><code>class HttpApplication&lt;T&gt; {\r\n  context: T;\r\n\r\n  constructor(context: T) {\r\n    this.context = context;\r\n  }\r\n\r\n  get(handler: (ctx: T) =&gt; void) {\r\n    handler(this.context);\r\n  }\r\n}\r\n<\/code><\/pre>\n<h3>\u0633\u0627\u062e\u062a \u062a\u0627\u06cc\u067e\u200c\u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0627 \u062c\u0646\u0631\u06cc\u06a9<\/h3>\n<p>\u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u0627\u0633\u062a\u0641\u0627\u062f\u0647:<\/p>\n<pre><code>type Identity&lt;T&gt; = T;\r\n\r\ntype A = Identity&lt;number&gt;; \/\/ \u0646\u0648\u0639 number\r\n<\/code><\/pre>\n<p>\u0645\u062b\u0627\u0644 Partial \u06a9\u0647 \u062a\u0645\u0627\u0645 \u0641\u06cc\u0644\u062f\u0647\u0627 \u0631\u0627 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n<pre><code>type Partial&lt;T&gt; = {\r\n  [P in keyof T]?: T[P];\r\n};\r\n<\/code><\/pre>\n<h3>\u0645\u062b\u0627\u0644 \u067e\u06cc\u0634\u0631\u0641\u062a\u0647: \u0646\u0648\u0639 \u06a9\u0645\u06a9\u06cc \u0628\u0631\u0627\u06cc \u0647\u0632\u06cc\u0646\u0647 \u0627\u0631\u0633\u0627\u0644 \u062f\u0631 \u0634\u0628\u06a9\u0647 \u0641\u0631\u0648\u0634\u06af\u0627\u0647\u06cc<\/h3>\n<p>\u0646\u0648\u0639 \u06a9\u0645\u06a9\u06cc <code>IfSameKeyThanParentTOtherwiseOtherType<\/code> \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0627\u06af\u0631 \u06a9\u0644\u06cc\u062f \u0628\u0631\u0627\u0628\u0631 \u0628\u0627\u0634\u062f\u060c \u0646\u0648\u0639 \u0648\u0627\u0644\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648\u06af\u0631\u0646\u0647 \u0646\u0648\u0639 \u062f\u06cc\u06af\u0631. \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u0634\u06a9\u0644 \u062f\u0631\u0633\u062a \u0645\u0642\u062f\u0627\u0631 \u062f\u0631 \u0622\u062f\u0631\u0633\u200c\u0647\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n<h3>\u062a\u0627\u06cc\u067e \u0645\u067e \u0634\u062f\u0647 (Mapped Types) \u0628\u0627 \u062c\u0646\u0631\u06cc\u06a9<\/h3>\n<p>\u0645\u062b\u0644\u0627\u064b \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u0645 \u0646\u0648\u0639\u06cc \u0628\u0633\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u062a\u0645\u0627\u0645 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u062a\u0627\u06cc\u067e \u062f\u06cc\u06af\u0631 \u0631\u0627 \u0628\u0648\u0644\u06cc\u0646 \u06a9\u0646\u062f:<\/p>\n<pre><code>type BooleanFields&lt;T&gt; = { [K in keyof T]: boolean; };\r\n<\/code><\/pre>\n<p>\u0645\u062b\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u0686\u0647 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc\u06cc \u0628\u0627\u06cc\u062f \u06af\u0631\u0641\u062a\u0647 \u0634\u0648\u0646\u062f:<\/p>\n<pre><code>type UserFetchOptions = BooleanFields&lt;User&gt;;\r\n<\/code><\/pre>\n<p>\u0645\u062b\u0627\u0644 \u0646\u0648\u0639 <code>Readonly<\/code> \u06a9\u0647 \u062a\u0645\u0627\u0645 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0631\u0627 \u0641\u0642\u0637\u200c\u062e\u0648\u0627\u0646\u062f\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n<pre><code>type Readonly&lt;T&gt; = {\r\n  readonly [K in keyof T]: T[K];\r\n};\r\n<\/code><\/pre>\n<h3>\u062a\u0627\u06cc\u067e\u200c\u0647\u0627\u06cc \u0634\u0631\u0637\u06cc (Conditional Types)<\/h3>\n<p>\u0646\u0648\u0639\u06cc \u06a9\u0647 \u0634\u0631\u0637 \u0645\u06cc\u200c\u06af\u0630\u0627\u0631\u062f:<\/p>\n<pre><code>type IsStringType&lt;T&gt; = T extends string ? true : false;\r\n<\/code><\/pre>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0646\u0648\u0627\u0639 \u0627\u0633\u062a\u0631\u06cc\u0646\u06af \u0645\u06cc\u200c\u0634\u0648\u062f true \u0648 \u0628\u0642\u06cc\u0647 false.<\/p>\n<h3>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 infer \u062f\u0631 \u062a\u0627\u06cc\u067e \u0634\u0631\u0637\u06cc<\/h3>\n<p>\u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0646\u0648\u0639 \u0628\u0627\u0632\u06af\u0634\u062a\u06cc \u062a\u0627\u0628\u0639:<\/p>\n<pre><code>type GetReturnType&lt;T&gt; = T extends (...args: any[]) =&gt; infer U ? U : never;\r\n<\/code><\/pre>\n<p>\u0645\u062b\u0627\u0644:<\/p>\n<pre><code>function someFunction() {\r\n  return true;\r\n}\r\n\r\ntype ReturnTypeOfSomeFunction = GetReturnType&lt;typeof someFunction&gt;;\r\n<\/code><\/pre>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0648\u0639 \u0635\u062d\u06cc\u062d <code>boolean<\/code> \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n<h3>\u0633\u0627\u062e\u062a \u0646\u0648\u0639 \u0634\u0631\u0637\u06cc NestedOmit \u0628\u0631\u0627\u06cc \u062d\u0630\u0641 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062f\u0627\u062e\u0644\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a dot notation<\/h3>\n<p>\u0646\u0648\u0639\u06cc \u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 dot notation \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u062a\u0648 \u062f\u0631 \u062a\u0648 \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u0645:<\/p>\n<pre><code>type NestedOmit&lt;T extends Record&lt;string, any&gt;, KeysToOmit extends string&gt; =\r\n  KeysToOmit extends `${infer KeyPart1}.${infer KeyPart2}`\r\n    ? KeyPart1 extends keyof T\r\n      ? Omit&lt;T, KeyPart1&gt; &amp; { [NewKeys in KeyPart1]: NestedOmit&lt;T[NewKeys], KeyPart2&gt; }\r\n      : T\r\n    : Omit&lt;T, KeysToOmit&gt;;\r\n<\/code><\/pre>\n<p>\u0645\u062b\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647:<\/p>\n<pre><code>type NestedObject = {\r\n  a: {\r\n    b: {\r\n      c: string;\r\n      d: number;\r\n    };\r\n    e: boolean;\r\n  };\r\n  f: string;\r\n};\r\n\r\ntype Result = NestedOmit&lt;NestedObject, \"a.b.c\"&gt;;\r\n<\/code><\/pre>\n<p>\u062f\u0631 \u0646\u062a\u06cc\u062c\u0647 \u0641\u06cc\u0644\u062f c \u0627\u0632 \u0633\u0627\u062e\u062a\u0627\u0631 \u062a\u0648 \u062f\u0631 \u062a\u0648 \u062d\u0630\u0641 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n<h3>\u0646\u062a\u06cc\u062c\u0647\u200c\u06af\u06cc\u0631\u06cc<\/h3>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0628\u0627 \u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u062f\u0631 \u062a\u0648\u0627\u0628\u0639\u060c \u0627\u06cc\u0646\u062a\u0631\u0641\u06cc\u0633\u200c\u0647\u0627\u060c \u06a9\u0644\u0627\u0633\u200c\u0647\u0627\u060c \u0646\u0648\u0639\u200c\u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc\u060c \u0645\u067e\u200c\u062a\u0627\u06cc\u067e\u200c\u0647\u0627 \u0648 \u062a\u0627\u06cc\u067e\u200c\u0647\u0627\u06cc \u0634\u0631\u0637\u06cc \u0622\u0634\u0646\u0627 \u0634\u062f\u06cc\u062f. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631\u0633\u062a \u0627\u0632 \u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627 \u0646\u0647 \u062a\u0646\u0647\u0627 \u06a9\u062f \u0634\u0645\u0627 \u0631\u0627 \u0645\u0646\u0639\u0637\u0641\u200c\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0628\u0644\u06a9\u0647 \u0627\u0632 \u062a\u06a9\u0631\u0627\u0631 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u062a\u062c\u0631\u0628\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0631\u0627 \u0628\u0647\u062a\u0631 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f.<\/p>\n<p>\u0627\u0632 \u0647\u0645\u0631\u0627\u0647\u06cc \u0634\u0645\u0627 \u0628\u0627 <strong><a href=\"https:\/\/parmin.cloud\/\">\u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f<\/a><\/strong> \u0645\u062a\u0634\u06a9\u0631\u06cc\u0645.<\/p>\n<div style='text-align:center' class='yasr-auto-insert-visitor'><\/div>","protected":false},"excerpt":{"rendered":"<p>\u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u062f\u0631 \u062a\u0627\u06cc\u067e\u200c\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062c\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627 \u06cc\u06a9\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0627\u0633\u0627\u0633\u06cc \u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u0646\u0648\u0639 \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u062a\u0627 \u0646\u0648\u0639\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0628\u0647 \u06cc\u06a9 \u0646\u0648\u0639\u060c \u062a\u0627\u0628\u0639 \u06cc\u0627 \u0633\u0627\u062e\u062a\u0627\u0631\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0646\u062f. \u0648\u0642\u062a\u06cc \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a\u06cc \u062c\u0646\u0631\u06cc\u06a9 \u0634\u0648\u062f\u060c \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u062a\u0627\u06cc\u067e\u200c\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0639\u0645\u0627\u0644 \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0627\u0639\u062b \u0627\u0646\u0639\u0637\u0627\u0641\u200c\u067e\u0630\u06cc\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631 \u06a9\u062f\u060c \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":5703,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"yasr_overall_rating":0,"yasr_post_is_review":"","yasr_auto_insert_disabled":"","yasr_review_type":"","footnotes":""},"categories":[190,67],"tags":[619,618,617,615,616],"class_list":["post-5694","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming","category-67","tag-619","tag---generics--typescript--","tag-617","tag--generics-----","tag------typescript"],"aioseo_notices":[],"yasr_visitor_votes":{"stars_attributes":{"read_only":false,"span_bottom":false},"number_of_votes":0,"sum_votes":0},"_links":{"self":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/5694","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/comments?post=5694"}],"version-history":[{"count":1,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/5694\/revisions"}],"predecessor-version":[{"id":5696,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/5694\/revisions\/5696"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/media\/5703"}],"wp:attachment":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/media?parent=5694"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/categories?post=5694"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/tags?post=5694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}