{"id":26122,"date":"2026-07-02T01:41:19","date_gmt":"2026-07-02T01:41:19","guid":{"rendered":"https:\/\/umang.pk\/2026\/07\/02\/typescript-%da%af%d8%a7%d8%b1%da%88-%db%8c%d9%88%d9%b9%db%8c%d9%84%db%8c%d9%b9%db%8c-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%d8%ac\/"},"modified":"2026-07-02T01:41:19","modified_gmt":"2026-07-02T01:41:19","slug":"typescript-%da%af%d8%a7%d8%b1%da%88-%db%8c%d9%88%d9%b9%db%8c%d9%84%db%8c%d9%b9%db%8c-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%d8%ac","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/07\/02\/typescript-%da%af%d8%a7%d8%b1%da%88-%db%8c%d9%88%d9%b9%db%8c%d9%84%db%8c%d9%b9%db%8c-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%d8%ac\/","title":{"rendered":"TypeScript \u06af\u0627\u0631\u0688 \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u06cc\u067e\u0633 \u06a9\u0648 \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638 \u0688\u06cc\u0679\u0627 \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2"},"content":{"rendered":"\n<div id=\"\">\n<p>\u062a\u0635\u0648\u06cc\u0631 \u06a9\u06be\u06cc\u0646\u0686\u0648\u06d4 \u062c\u0628 API \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 API \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0648\u0627\u067e\u0633 \u0645\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba \u062a\u0648 \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0633\u0628 \u06a9\u0686\u06be \u0679\u06be\u06cc\u06a9 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0631\u0636\u06cc \u0688\u06cc\u0679\u0627 \u0635\u0627\u0641 \u06c1\u06d2\u060c \u0627\u0642\u0633\u0627\u0645 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0633\u0628 \u06a9\u0686\u06be \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u06be\u0631 \u06a9\u0648\u0688 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 API \u06a9\u06d2 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u0633\u06d2 \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d \u0648\u0627\u067e\u0633 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>null<\/code> \u062a\u0627\u0631 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2. \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0635\u0641 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06a9\u0631 \u0631\u06c1\u0627 \u062a\u06be\u0627\u060c \u0644\u06cc\u06a9\u0646 \u0645\u062c\u06be\u06d2 \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u0648\u0627\u067e\u0633 \u0645\u0644\u0627: <code>undefined<\/code>\u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u0627\u0648\u0631 \u0648\u0635\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>number<\/code>. \u0627\u0686\u0627\u0646\u06a9\u060c \u0622\u067e \u06a9\u0648 \u0627\u06cc\u0631\u0631 \u0627\u0633\u06a9\u0631\u06cc\u0646\u0632\u060c UI \u06a9\u0631\u06cc\u0634\u0632\u060c \u0627\u0648\u0631 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u062e\u0627\u0645\u0648\u0634 \u0688\u06cc\u0679\u0627 \u0628\u062f\u0639\u0646\u0648\u0627\u0646\u06cc \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06a9\u0631\u0646\u0627 \u067e\u0691\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u067e\u0631 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0646\u0648\u0679\u0633 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u062c\u0628 \u062a\u06a9 \u0622\u067e \u0634\u06a9\u0627\u06cc\u062a \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06cc \u062a\u0631\u0642\u06cc \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0627\u0648\u0631 \u0631\u0648\u06a9\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0641\u06a9\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06be\u0631\u0688 \u067e\u0627\u0631\u0679\u06cc \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc\u0648\u06ba \u06cc\u0627 \u0645\u06a9\u0645\u0644 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc \u0628\u062d\u0627\u0644\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0636\u0631\u0648\u0631\u062a \u067e\u0691\u0646\u06d2 \u067e\u0631 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0641\u0627\u062f\u06cc\u062a \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0627\u0648\u0631 \u0646\u0638\u0645 \u0648 \u0636\u0628\u0637 \u06a9\u0627 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u0627 \u0645\u062c\u0645\u0648\u0639\u06c1 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0636\u0645\u0648\u0646 \u0622\u067e \u06a9\u0648 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0686\u0627\u0631 TypeScript \u062a\u062d\u0641\u0638 \u06a9\u06cc \u0627\u0641\u0627\u062f\u06cc\u062a \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0644\u0686\u06a9\u062f\u0627\u0631 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646\u0632 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u0626\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u06a9\u0648 \u0645\u0632\u06cc\u062f \u0645\u0633\u062a\u062d\u06a9\u0645 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>safeArray<\/code>\u060c <code>safeString<\/code>\u060c <code>safeNumber<\/code>\u0627\u0648\u0631 <code>safeObject<\/code>. \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc\u0632 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0627\u06cc\u06af\u0646\u0648\u0633\u0679\u06a9 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u0627\u0646\u06c1\u06cc\u06ba \u0627\u067e\u0646\u06d2 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0686\u06be\u0648\u0691 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0686\u0627\u06c1\u06d2 \u0622\u067e React\u060c \u0633\u0627\u062f\u06c1 JavaScript\u060c \u06cc\u0627 \u0627\u0633 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u0648\u06ba\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h3 id=\"heading-prerequisites\">\u0634\u0631\u0627\u0626\u0637<\/h3>\n<p>\u0688\u0627\u0626\u06cc\u0648\u0646\u06af \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p>TypeScript \u06a9\u0627 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0639\u0644\u0645\u06d4 \u0622\u067e \u06a9\u0648 \u0645\u0627\u06c1\u0631 \u0628\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0648 \u0627\u0642\u0633\u0627\u0645\u060c \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u0627\u0648\u0631 \u062c\u0646\u0631\u06a9 \u0633\u06d2 \u0648\u0627\u0642\u0641 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u0648\u0631 \u0628\u0644\u0679 \u0627\u0646 \u0679\u0627\u0626\u067e \u0686\u06cc\u06a9\u0646\u06af \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06d2\u060c \u062c\u06cc\u0633\u06d2 <code>typeof<\/code> \u0627\u0648\u0631 <code>Array.isArray<\/code>.<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-the-problem\">\u0645\u0633\u0626\u0644\u06c1<\/h2>\n<p>JavaScript \u0627\u06cc\u06a9 \u0688\u06be\u06cc\u0644\u06d2 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0679\u0627\u0626\u067e \u06a9\u06cc \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0632\u0628\u0627\u0646 \u06c1\u06d2\u06d4 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u0645\u062c\u06be\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u062f\u0648\u06ba \u06af\u0627\u06d4 <code>.map()<\/code> \u063a\u06cc\u0631 \u0635\u0641\u0648\u06ba \u067e\u0631 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>null<\/code>\u0627\u0648\u0631 \u067e\u06be\u0631 \u06c1\u0645 \u0631\u06cc\u0627\u0636\u06cc \u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba: <code>NaN<\/code>. \u06cc\u06c1 \u0633\u0628 \u06a9\u0686\u06be \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0645\u0645\u06a9\u0646 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0628\u06c1\u062a \u062f\u06cc\u0631 \u0646\u06c1 \u06c1\u0648\u062c\u0627\u0626\u06d2\u06d4 \u0632\u0628\u0627\u0646 \u067e\u06cc\u0686\u06be\u06d2 \u0646\u06c1\u06cc\u06ba \u06c1\u0679\u062a\u06cc\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u0679\u0648\u0679 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>TypeScript \u0645\u062f\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u062d\u062f \u062a\u06a9\u06d4 \u0627\u0642\u0633\u0627\u0645 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u0645\u0631\u062a\u0628 \u0648\u0642\u062a \u067e\u0631 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0646\u06c1\u06cc\u06ba\u06d4 \u0644\u06c1\u0630\u0627 \u062c\u0628 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0688\u06cc\u0679\u0627 API\u060c \u0641\u0627\u0631\u0645 \u062c\u0645\u0639 \u06a9\u0631\u0627\u0646\u06d2\u060c \u0645\u0642\u0627\u0645\u06cc \u0627\u0633\u0679\u0648\u0631\u06cc\u062c\u060c \u06cc\u0627 \u0641\u0631\u06cc\u0642 \u062b\u0627\u0644\u062b SDK \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u060c TypeScript \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0639\u0645\u0627\u0631\u062a \u0633\u06d2 \u0646\u06a9\u0644 \u0686\u06a9\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0641\u0631\u0642 \u0646\u06c1\u06cc\u06ba \u067e\u0691\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06a9\u06cc\u0627 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2\u060c \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0627\u0635\u0644 \u0642\u062f\u0631 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba \u06cc\u06c1 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-typescript\">\/\/ This looks fine. It is not fine.\ntype User = {\n  id: number;\n  name: string;\n  tags: string[];\n};\n\nfunction displayUser(user: User) {\n  const upperName = user.name.toUpperCase();\n  const tagList = user.tags.map((tag) => `#${tag}`);\n  return { upperName, tagList };\n}\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>user.name<\/code> \u06cc\u06c1 \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2: <code>null<\/code>\u0641\u0648\u0646 \u06a9\u0627\u0644 <code>.toUpperCase()<\/code> \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 <code>user.tags<\/code> \u06c1\u06d2 <code>undefined<\/code>\u0641\u0648\u0646 \u06a9\u0627\u0644 <code>.map()<\/code> \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u06be\u06cc \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0635\u0644 API \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a\u060c \u062f\u0648\u0646\u0648\u06ba \u0645\u0646\u0638\u0631\u0646\u0627\u0645\u06d2 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0645\u06a9\u0646 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 TypeScript \u0622\u067e \u06a9\u0648 \u0645\u062a\u0646\u0628\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u06d2 \u06af\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u0627\u0633\u06d2 \u0642\u0633\u0645 \u067e\u0631 \u0628\u06be\u0631\u0648\u0633\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u0648 \u06a9\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0648! \u0645\u06cc\u06ba \u0646\u06d2 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u06a9\u06c1\u062a\u06d2 \u0633\u0646\u0627\u060c &quot;\u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u0648\u06ba\u06d4&#8221; <code>optional chaining<\/code> \u0645\u06cc\u0631\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u06a9\u0631\u06cc\u0634 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u06cc\u06c1 \u062f\u0631\u0633\u062a \u06c1\u06d2\u060c \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0630\u06cc\u0644 \u06a9\u06cc \u0645\u062b\u0627\u0644 \u0645\u06cc\u06ba \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ This looks better. But...\ntype User = {\n  id: number;\n  name: string;\n  tags: string[];\n};\n\nfunction displayUser(user: User) {\n  const upperName = user?.name?.toUpperCase?.();\n  const tagList = (user?.tags || [])?.map((tag) => `#${tag}`); \n  return { upperName, tagList };\n}\n<\/code><\/pre>\n<p>\u062a\u0627\u06c1\u0645\u060c \u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2. \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c <code>upperName<\/code> \u0648\u0627\u067e\u0633 \u0622 \u062c\u0627\u0626\u06d2 \u06af\u0627 <code>undefined<\/code> \u0627\u06af\u0631 <code>user.name<\/code> \u06cc\u06c1 \u062a\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062f\u0648\u0633\u0631\u0627\u060c <code>user?.tag || []<\/code> \u0628\u0627\u0624\u0646\u0633\u0631 <code>undefined<\/code> \u0627\u0648\u0631 <code>null<\/code> \u0627\u0642\u062f\u0627\u0631 \u062a\u0646\u06c1\u0627 \u06c1\u06cc\u06ba\u06d4 \u062c\u0628 \u0627\u0639\u062a\u0631\u0627\u0636 \u0648\u0627\u067e\u0633 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u061f <code>{...}?.map(...)<\/code>? \u0627\u0628 \u06a9\u06cc\u0627 \u0622\u067e \u0627\u0635\u0644 \u0645\u0633\u0626\u0644\u06c1 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u061f<\/p>\n<p>\u062a\u0648 <code>user?.name?.toUpperCase?.()<\/code> \u06c1\u0645 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: <code>user<\/code>\u060c <code>name<\/code>\u06cc\u0627 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 <code>toUpperCase<\/code> \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06cc\u06c1 \u062e\u0648\u062f \u0645\u0648\u062c\u0648\u062f \u0646\u06c1 \u06c1\u0648\u06d4 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u063a\u06cc\u0631 \u06cc\u0642\u06cc\u0646\u06cc \u0627\u0642\u0633\u0627\u0645 \u0633\u06d2 \u0646\u0645\u0679\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u06cc\u06c1 \u06a9\u0627\u0631\u0622\u0645\u062f \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u062a\u0636\u0627\u062f\u0627\u062a \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-why-this-problem-exists\">\u06cc\u06c1 \u0645\u0633\u0626\u0644\u06c1 \u06a9\u06cc\u0648\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u061f<\/h2>\n<p>\u0642\u0635\u0648\u0631 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06d2 \u0679\u0627\u0626\u067e \u0633\u0633\u0679\u0645 \u067e\u0631 \u06c1\u06d2\u060c \u06cc\u0627 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0679\u0627\u0626\u067e \u0633\u0633\u0679\u0645 \u06a9\u06cc \u06a9\u0645\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>JavaScript \u0645\u06cc\u06ba \u06a9\u0626\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0627\u0642\u0633\u0627\u0645 \u0627\u0648\u0631 \u06a9\u0686\u06be \u0627\u0635\u0648\u0644 \u06c1\u06cc\u06ba \u062c\u0648 \u0645\u0646\u0627\u0633\u0628 \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u0627\u0646 \u06a9\u0648 \u062a\u0641\u0635\u06cc\u0644 \u0633\u06d2 \u0646\u06c1 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c <code>typeof null<\/code> \u0631\u067e\u0648\u0631\u0679 <code>\"object\"<\/code>\u060c <code>typeof []<\/code> \u0648\u0627\u067e\u0633 \u0628\u06be\u06cc <code>\"object\"<\/code>\u0627\u0648\u0631 <code>typeof NaN<\/code> \u0631\u067e\u0648\u0631\u0679 <code>\"number\"<\/code>. \u06cc\u06c1 \u06a9\u0648\u0626\u06cc \u0627\u0646\u062a\u06c1\u0627\u0626\u06cc \u0645\u0639\u0627\u0645\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0632\u0628\u0627\u0646 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u06a9\u062a\u0646\u06cc \u0622\u0633\u0627\u0646\u06cc \u0633\u06d2 \u06af\u0645\u0631\u0627\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u06a9\u06cc \u0627\u06cc\u06a9 \u0641\u0648\u0631\u06cc \u0645\u062b\u0627\u0644 \u06cc\u06c1 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-javascript\">typeof null;        \/\/ \"object\" \u2014 not \"null\"\ntypeof [];          \/\/ \"object\" \u2014 not \"array\"\ntypeof NaN;         \/\/ \"number\" \u2014 NaN is technically a number\nArray.isArray([]);  \/\/ true \u2014 this is the correct check\nisNaN(\"hello\");     \/\/ true \u2014 because \"hello\" coerces to NaN\nNumber.isNaN(\"hello\"); \/\/ false \u2014 this is the correct check\n<\/code><\/pre>\n<p>TypeScript \u0627\u0633 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u0627\u06cc\u06a9 \u062c\u0627\u0645\u062f \u0642\u0633\u0645 \u06a9\u0627 \u0646\u0638\u0627\u0645 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u0648\u0688 \u06a9\u06d2 \u0686\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0628\u06c1\u062a \u0633\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u062c\u0627\u0645\u062f \u062a\u062c\u0632\u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u06a9\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0644\u06a9\u06be \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0644\u0645\u062d\u06d2 \u062c\u0628 \u0688\u06cc\u0679\u0627 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u062d\u062f \u06a9\u0648 \u0639\u0628\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 \u062f\u0627\u062e\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>localStorage<\/code>URL \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631\u0632\u060c \u0641\u0631\u06cc\u0642 \u062b\u0627\u0644\u062b \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u067e\u0679\u0633\u060c \u06cc\u0627 \u06a9\u0648\u0688\u0628\u06cc\u0633 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u06a9\u06d2 \u0630\u0631\u0627\u0626\u0639 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c TypeScript \u0631\u06a9\u0646\u06d2 \u06a9\u06cc \u0636\u0645\u0627\u0646\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u0622\u067e \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-typescript\">const data = await response.json() as User;\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2\u06d4 \u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0645\u067e\u0627\u0626\u0644\u0631 \u06a9\u0648 \u0628\u062a\u0627\u0626\u06cc\u06ba &quot;\u0645\u06cc\u06ba \u06cc\u06c1 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u0648\u06ba\u06d4 <code>User<\/code>\u06a9\u0645\u067e\u0627\u0626\u0644\u0631 \u0627\u0633 \u0648\u0639\u062f\u06d2 \u06a9\u0648 \u0642\u0628\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u0627\u06af\u0631 API \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2\u06d4 <code>null<\/code> \u06a9\u0633\u06cc \u0641\u06cc\u0644\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u06af\u0631 \u0622\u067e \u0627\u06cc\u06a9 \u0633\u0679\u0631\u0646\u06af \u0628\u06be\u06cc\u062c\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633 \u0633\u06d2 \u06a9\u0633\u06cc \u0646\u0645\u0628\u0631 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u06cc\u0627 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633 \u0648\u0635\u0641 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0628\u06c1\u0631 \u062d\u0627\u0644 \u0622\u06af\u06d2 \u0628\u0691\u06be\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0622\u067e \u06a9\u0627 \u06a9\u0648\u0688 \u067e\u06c1\u0644\u06cc \u0686\u06cc\u0632 \u067e\u0631 \u0679\u0648\u0679 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u062c\u0648 \u06cc\u06c1 \u0633\u0645\u062c\u06be\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>&quot;TypeScript \u06a9\u06d2 \u062e\u06cc\u0627\u0644 \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u06a9\u06cc\u0627 \u06c1\u06d2&#8221; \u0627\u0648\u0631 &quot;\u0688\u06cc\u0679\u0627 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u0631\u0646 \u0679\u0627\u0626\u0645 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2&#8221; \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06cc\u06c1 \u0641\u0631\u0642 \u0648\u06c1\u06cc\u06ba \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0688\u06cc\u0679\u0627 \u0628\u06af\u0632 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062d\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0642\u0633\u0645 \u06a9\u06d2 \u062f\u0639\u0648\u0648\u06ba \u067e\u0631 \u0628\u06be\u0631\u0648\u0633\u06c1 \u06a9\u0631\u0646\u0627 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062f\u0631\u0633\u062a \u06a9\u0631\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-the-solution-safe-access-utilities\">\u062d\u0644: \u0645\u062d\u0641\u0648\u0638 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06cc \u0627\u0641\u0627\u062f\u06cc\u062a<\/h2>\n<p>\u062d\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0628\u0627\u0624\u0646\u0688\u0631\u06cc \u067e\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062c\u0627\u0626\u06d2\u06d4 \u062c\u0633 \u0644\u0645\u062d\u06d2 \u0645\u062a\u0648\u0642\u0639 \u0688\u06cc\u0679\u0627 \u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u062f\u0627\u062e\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0686\u0627\u0631 \u0627\u0641\u0639\u0627\u0644 \u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u0633\u0627 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-typescript\">export function safeArray<t>(prop: unknown): T[] {\n  if (Array.isArray(prop)) {\n    return prop as T[];\n  } else {\n    return [] as T[];\n  }\n}\n\nexport function safeString(prop: unknown, fallback = \"\"): string {\n  if (typeof prop === \"string\") {\n    return prop;\n  } else {\n    return fallback;\n  }\n}\n\nexport function safeNumber(prop: unknown, fallback = 0): number {\n  if (typeof prop === \"number\" && !isNaN(prop)) {\n    return prop;\n  } else {\n    return fallback;\n  }\n}\n\nexport function safeObject<t extends=\"\" object=\"\">(\n  prop: unknown,\n  fallback = {} as T,\n): T {\n  if (prop !== null && typeof prop === \"object\" && !Array.isArray(prop)) {\n    return prop as T;\n  }\n  return fallback;\n}\n<\/t><\/t><\/code><\/pre>\n<p>\u06c1\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u06c1\u06d2\u06d4 <code>unknown<\/code>\u0622\u067e \u06a9\u0648 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0642\u06cc\u0645\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06cc \u06c1\u0648\u06af\u06cc\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0642\u062f\u0631 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u06af\u0631 \u0627\u0646 \u067e\u0679 \u0627\u0633 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06a9\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc\u06d4 \u06a9\u0648\u0626\u06cc \u062a\u0646\u0627\u0632\u0639\u06c1 \u0646\u06c1\u06cc\u06ba\u060c \u06a9\u0648\u0626\u06cc \u062e\u0627\u0645\u0648\u0634\u06cc \u0646\u06c1\u06cc\u06ba\u06d4 <code>undefined<\/code>\u06a9\u0648\u0626\u06cc \u06a9\u0631\u067e\u0679\u0648\u06af\u0631\u0627\u0641\u06a9 \u0631\u0646 \u0679\u0627\u0626\u0645 \u063a\u0644\u0637\u06cc\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u0627\u0646 \u06a9\u0648 \u0627\u067e\u0646\u06cc React \u0627\u06cc\u067e\u060c Node.js API\u060c vanilla TypeScript \u0645\u0627\u0688\u06cc\u0648\u0644\u060c \u06cc\u0627 \u06a9\u0633\u06cc \u0628\u06be\u06cc JavaScript \u06cc\u0627 TypeScript \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0688\u06cc\u0679\u0627 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-each-utility-works\">\u06c1\u0631 \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/h2>\n<h3 id=\"heading-safearray\"><code>safeArray<\/code><\/h3>\n<pre><code class=\"language-typescript\">export function safeArray<t>(prop: unknown): T[] {\n  if (Array.isArray(prop)) {\n    return prop as T[];\n  } else {\n    return [] as T[];\n  }\n}\n<\/t><\/code><\/pre>\n<p>\u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0646\u06c1\u06cc\u06ba\u06d4 <code>prop<\/code> \u06cc\u06c1 \u062f\u0631\u0627\u0635\u0644 \u0627\u06cc\u06a9 \u0635\u0641 \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2: <code>Array.isArray<\/code>. \u0627\u06af\u0631 \u0627\u06cc\u0633\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0679\u0627\u0626\u067e \u06a9\u0631\u06cc\u06ba: <code>T[]<\/code>. \u0627\u06af\u0631 \u0635\u0641 \u0627\u0633 \u0637\u0631\u062d \u0646\u06c1\u06cc\u06ba \u06c1\u06d2: <code>null<\/code>\u060c <code>undefined<\/code>\u0633\u0679\u0631\u0646\u06af\u0632 \u06a9\u06cc \u062e\u0627\u0644\u06cc \u0635\u0641 \u06cc\u0627 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06d2 \u0646\u0631\u0627\u0644\u0627 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u0627\u06c1\u0645 \u06c1\u06d2 \u062c\u0648 \u06c1\u0645 \u0646\u06d2 \u0627\u0648\u067e\u0631 \u062f\u06cc\u06a9\u06be\u0627\u06d4 <code>typeof []<\/code> \u0631\u067e\u0648\u0631\u0679 <code>\"object\"<\/code>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0646\u0627\u062f\u0627\u0646\u06cc\u06d4 <code>typeof<\/code> \u0622\u067e \u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u067e\u06a9\u0691 \u0633\u06a9\u062a\u06d2\u06d4 <code>Array.isArray<\/code> \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u0648\u06d4<\/p>\n<h3 id=\"heading-safestring\"><code>safeString<\/code><\/h3>\n<pre><code class=\"language-typescript\">export function safeString(prop: unknown, fallback = \"\"): string {\n  if (typeof prop === \"string\") {\n    return prop;\n  } else {\n    return fallback;\n  }\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>typeof<\/code> \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0642\u062f\u0631 \u0627\u06cc\u06a9 \u062a\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc <code>fallback<\/code> \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631\u0632 \u0622\u067e \u06a9\u0648 \u0628\u0627\u0645\u0639\u0646\u06cc \u0688\u06cc\u0641\u0627\u0644\u0679 \u0627\u0642\u062f\u0627\u0631 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c <code>\"Unknown\"<\/code> \u0635\u0627\u0631\u0641 \u0646\u0627\u0645 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u062e\u0627\u0644\u06cc \u062a\u0627\u0631 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h3 id=\"heading-safenumber\"><code>safeNumber<\/code><\/h3>\n<pre><code class=\"language-typescript\">export function safeNumber(prop: unknown, fallback = 0): number {\n  if (typeof prop === \"number\" && !isNaN(prop)) {\n    return prop;\n  } else {\n    return fallback;\n  }\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1\u0627\u06ba \u0627\u06c1\u0645 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06cc\u06c1 \u06c1\u06cc\u06ba: <code>!isNaN(prop)<\/code>. \u06a9\u06cc\u0648\u0646\u06a9\u06c1 <code>typeof NaN === \"number\"<\/code> \u06cc\u06c1 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0645\u06cc\u06ba \u0633\u0686 \u06c1\u06d2\u06d4 \u0627\u0633 \u0686\u06cc\u06a9 \u06a9\u0648 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633\u06cc \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 <code>NaN<\/code> \u0627\u06cc\u06a9 \u0628\u06c1\u0627\u0648 \u062d\u0633\u0627\u0628 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u0648\u0627\u0642\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062e\u0635\u0648\u0635\u06cc\u062a \u0627\u0633 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-safeobject\"><code>safeObject<\/code><\/h3>\n<pre><code class=\"language-typescript\">export function safeObject<t extends=\"\" object=\"\">(\n  prop: unknown,\n  fallback = {} as T,\n): T {\n  if (prop !== null && typeof prop === \"object\" && !Array.isArray(prop)) {\n    return prop as T;\n  }\n  return fallback;\n}\n<\/t><\/code><\/pre>\n<p>\u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06cc \u0646\u0648\u0639\u06cc\u062a \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2\u060c \u062a\u06cc\u0646 \u0634\u0631\u0627\u0626\u0637 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06cc\u06ba: <code>typeof null === \"object\"<\/code> \u06cc\u06c1 \u0633\u0686 \u06c1\u06d2\u06d4 <code>typeof [] === \"object\"<\/code> \u06cc\u06c1 \u0628\u06be\u06cc \u0633\u0686 \u06c1\u06d2\u06d4 \u062a\u0648 \u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u062e\u0627\u0631\u062c \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0648 \u0622\u067e \u06a9\u0648 \u0648\u0627\u067e\u0633 \u0645\u0644\u062a\u0627 \u06c1\u06d2 \u0648\u06c1 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0686\u06cc\u0632 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0627\u0648\u0631 \u0686\u06cc\u0632 \u06a9\u06cc \u0636\u0645\u0627\u0646\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-use-them-in-practice\">\u0627\u0635\u0644 \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<h3 id=\"heading-normalising-api-responses-plain-typescript\">API \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u0648 \u0645\u0639\u0645\u0648\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba (\u0633\u0627\u062f\u06c1 \u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679)<\/h3>\n<p>\u0627\u0646 \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc\u0632 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u062c\u06af\u06c1 \u0627\u0646 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba \u06c1\u06d2 \u062c\u0648 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u062d\u0635\u0648\u06ba \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 API \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 React \u0627\u06cc\u067e\u0633\u060c Node.js \u0633\u0631\u0648\u0633\u0632\u060c \u06cc\u0627 \u0633\u0627\u062f\u06c1 TypeScript \u0645\u0627\u0688\u06cc\u0648\u0644\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ lib\/users.ts\nimport { safeArray, safeString, safeNumber, safeObject } from \"@\/utils\/safe\";\n\ntype User = {\n  id: number;\n  name: string;\n  email: string;\n  tags: string[];\n};\n\nfunction normaliseUser(raw: unknown): User {\n  const obj = safeObject<record unknown=\"\">>(raw);\n\n  return {\n    id: safeNumber(obj.id),\n    name: safeString(obj.name, \"Unknown User\"),\n    email: safeString(obj.email),\n    tags: safeArray<string>(obj.tags),\n  };\n}\n\nasync function fetchUser(id: string): Promise<user> {\n  const response = await fetch(`\/api\/users\/${id}`);\n  const data = await response.json();\n  return normaliseUser(data);\n}\n<\/user><\/string><\/record><\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0627 \u06a9\u0648\u0688 <code>User<\/code> \u06a9\u0633\u06cc \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0641\u06cc\u0644\u0688\u0632 \u0645\u06cc\u06ba \u0627\u0633 \u0642\u0633\u0645 \u06a9\u06cc \u0636\u0645\u0627\u0646\u062a \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u0648\u06c1 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0646\u06cc\u0686\u06d2 \u06a9\u06cc \u0637\u0631\u0641 \u06a9\u0686\u06be \u0628\u06be\u06cc \u062d\u06cc\u0631\u0627\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>name<\/code> \u0634\u0627\u06cc\u062f <code>null<\/code> \u06cc\u0627 <code>tags<\/code> \u0634\u0627\u06cc\u062f <code>undefined<\/code>.<\/p>\n<h3 id=\"heading-in-a-react-component-defensive-rendering\">\u0631\u062f \u0639\u0645\u0644 \u06a9\u06d2 \u0627\u062c\u0632\u0627\u0621 (\u062f\u0641\u0627\u0639\u06cc \u0631\u06cc\u0646\u0688\u0631\u0646\u06af)<\/h3>\n<p>\u0628\u0639\u0636 \u0627\u0648\u0642\u0627\u062a \u0622\u067e \u06a9\u0648 \u067e\u0631\u067e\u0633\u060c \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642\u060c \u06cc\u0627 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u0633\u06d2 \u0627\u067e\u0646\u06d2 \u062c\u0632\u0648 \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0688\u06cc\u0679\u0627 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0622\u067e \u0627\u067e \u0627\u0633\u0679\u0631\u06cc\u0645 \u06a9\u0648 \u0645\u0639\u0645\u0648\u0644 \u067e\u0631 \u0644\u0627\u0646\u06d2 \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba\u060c \u0642\u06cc\u0645\u062a \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0645\u0642\u0627\u0645 \u067e\u0631 \u0644\u067e\u06cc\u0679 \u062f\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { safeArray, safeString, safeNumber, safeObject } from \"@\/utils\/safe\";\n\ntype ProductProps = {\n  product: unknown;\n};\n\nfunction ProductCard({ product }: ProductProps) {\n  const p = safeObject<record unknown=\"\">>(product);\n  const name = safeString(p.name, \"Unnamed Product\");\n  const price = safeNumber(p.price);\n  const tags = safeArray<string>(p.tags);\n\n  return (\n    <div classname=\"product-card\">\n      <h3>{name}<\/h3>\n      <p>${price.toFixed(2)}<\/p>\n      <ul>\n        {tags.map((tag) => (\n          <li key=\"{tag}\">{tag}<\/li>\n        ))}\n      <\/ul>\n    <\/div>\n  );\n}\n<\/string><\/record><\/code><\/pre>\n<p>\u0627\u0633\u06c1\u0627\u0644 <code>product<\/code> \u06cc\u06c1 \u0627\u0633 \u0637\u0631\u062d \u0622\u062a\u0627 \u06c1\u06d2: <code>null<\/code> \u06cc\u0627\u060c \u0627\u06af\u0631 \u06cc\u06c1 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u063a\u06cc\u0631 \u0645\u062a\u0648\u0642\u0639 \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u062c\u0632\u0648 \u06a9\u0631\u06cc\u0634 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0641\u0627\u0644 \u0628\u06cc\u06a9 \u0627\u0633\u0679\u06cc\u0679 \u067e\u06cc\u0634 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<h3 id=\"heading-with-react-query\">\u0631\u062f \u0639\u0645\u0644 \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4<\/h3>\n<p>\u0627\u06af\u0631 \u0622\u067e React Query \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0645\u0639\u0645\u0648\u0644 \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>select<\/code> \u062e\u0627\u0645 API \u0631\u062f\u0639\u0645\u0644 \u06a9\u0648 \u062c\u0632\u0648 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u062e\u062a\u06cc\u0627\u0631\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { useQuery } from \"@tanstack\/react-query\";\nimport { safeArray, safeString, safeNumber, safeObject } from \"@\/utils\/safe\";\n\ntype Order = {\n  id: number;\n  status: string;\n  total: number;\n  items: string[];\n};\n\nfunction normaliseOrder(raw: unknown): Order {\n  const obj = safeObject<record unknown=\"\">>(raw);\n  return {\n    id: safeNumber(obj.id),\n    status: safeString(obj.status, \"pending\"),\n    total: safeNumber(obj.total),\n    items: safeArray<string>(obj.items),\n  };\n}\n\nfunction useOrder(orderId: string) {\n  return useQuery({\n    queryKey: [\"order\", orderId],\n    queryFn: () =>\n      fetch(`\/api\/orders\/${orderId}`).then((res) => res.json()),\n    select: normaliseOrder,\n  });\n}\n<\/string><\/record><\/code><\/pre>\n<p>\u06a9\u06c1 <code>select<\/code> \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06d2 \u062d\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0644\u06cc\u06a9\u0646 \u0688\u06cc\u0679\u0627 \u06a9\u06cc\u0634 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0639\u0645\u0644 \u0645\u06cc\u06ba \u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0627 <code>useOrder<\/code> \u06c1\u06a9 \u06c1\u0645\u06cc\u0634\u06c1 \u0635\u062d\u06cc\u062d \u0634\u06a9\u0644 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>Order<\/code>\u0642\u0637\u0639 \u0646\u0638\u0631 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 API \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0648\u0627\u067e\u0633 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-with-a-react-context-provider\">React \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627<\/h3>\n<p>\u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638 \u0688\u06cc\u0679\u0627 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u067e\u0648\u0631\u06d2 \u062c\u0632\u0648 \u06a9\u06d2 \u062f\u0631\u062e\u062a \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u06be\u06cc\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u06cc \u0633\u0637\u062d \u067e\u0631 \u0645\u0639\u0645\u0648\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { createContext, useContext, useEffect, useState } from \"react\";\nimport { safeArray, safeString, safeObject } from \"@\/utils\/safe\";\n\ntype AppConfig = {\n  theme: string;\n  features: string[];\n};\n\nconst defaultConfig: AppConfig = {\n  theme: \"light\",\n  features: [],\n};\n\nconst ConfigContext = createContext<appconfig>(defaultConfig);\n\nfunction ConfigProvider({ children }: { children: React.ReactNode }) {\n  const [config, setConfig] = useState<appconfig>(defaultConfig);\n\n  useEffect(() => {\n    fetch(\"\/api\/config\")\n      .then((res) => res.json())\n      .then((raw: unknown) => {\n        const obj = safeObject<record unknown=\"\">>(raw);\n        setConfig({\n          theme: safeString(obj.theme, \"light\"),\n          features: safeArray<string>(obj.features),\n        });\n      });\n  }, []);\n\n  return (\n    <configcontext.provider value=\"{config}\">{children}<\/configcontext.provider>\n  );\n}\n\nexport function useConfig() {\n  return useContext(ConfigContext);\n}\n<\/string><\/record><\/appconfig><\/appconfig><\/code><\/pre>\n<p>\u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u06cc \u0633\u0637\u062d \u067e\u0631 \u0627\u06cc\u06a9 \u0646\u0627\u0631\u0645\u0644\u0627\u0626\u0632\u06cc\u0634\u0646 \u0645\u0631\u062d\u0644\u06c1 \u0627\u0646 \u062a\u0645\u0627\u0645 \u0627\u062c\u0632\u0627\u0621 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-in-a-nodejs-api-route\">Node.js API \u067e\u0627\u062a\u06be \u0645\u06cc\u06ba<\/h3>\n<p>\u06cc\u06c1 \u0627\u0641\u0627\u062f\u06cc\u062a \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u0628\u06be\u06cc \u06a9\u0627\u0631\u0622\u0645\u062f \u06c1\u06cc\u06ba\u06d4 \u062c\u0628 Node.js API \u06a9\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u0628\u0627\u0688\u06cc \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0627\u0633 \u0628\u0627\u062a \u067e\u0631 \u0628\u06be\u0631\u0648\u0633\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06a9\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0646\u06d2 \u0648\u06c1\u06cc \u0628\u06be\u06cc\u062c\u0627 \u062c\u0633 \u06a9\u06cc \u0627\u0633 \u06a9\u06cc \u062a\u0648\u0642\u0639 \u062a\u06be\u06cc\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u062f\u0627\u062e\u0644\u06d2 \u067e\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ routes\/orders.ts (Express)\nimport { safeArray, safeString, safeNumber, safeObject } from \"..\/utils\/safe\";\n\ntype OrderPayload = {\n  userId: number;\n  notes: string;\n  itemIds: number[];\n};\n\nfunction parseOrderPayload(raw: unknown): OrderPayload {\n  const obj = safeObject<record unknown=\"\">>(raw);\n  return {\n    userId: safeNumber(obj.userId),\n    notes: safeString(obj.notes),\n    itemIds: safeArray<number>(obj.itemIds),\n  };\n}\n\napp.post(\"\/orders\", (req, res) => {\n  const payload = parseOrderPayload(req.body);\n\n  if (!payload.userId) {\n    return res.status(400).json({ error: \"userId is required\" });\n  }\n\n  \/\/ proceed with validated payload\n});\n<\/number><\/record><\/code><\/pre>\n<p>\u0648\u06c1\u06cc 4 \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc\u0632\u060c \u0627\u06cc\u06a9 \u06c1\u06cc \u067e\u06cc\u0679\u0631\u0646\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0644\u0641 \u0631\u0646 \u0679\u0627\u0626\u0645 \u0645\u0627\u062d\u0648\u0644 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-best-practices\">\u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u0632 \u0639\u0645\u0644<\/h2>\n<p>\u06a9\u0633\u06cc \u0627\u0648\u0631 \u0686\u06cc\u0632 \u06a9\u06cc \u0637\u0631\u062d\u060c \u0627\u0646 \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc\u0632 \u06a9\u0648 \u0635\u062d\u06cc\u062d \u0627\u0648\u0631 \u062f\u0631\u0633\u062a \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u06cc \u0645\u062f\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06c1\u0645 \u06c1\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u062d\u062f\u0648\u062f \u067e\u0631 \u0645\u0639\u0645\u0648\u0644 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0646 \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc\u0632 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u062c\u06af\u06c1 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06c1\u06d2\u060c \u0622\u067e \u06a9\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u06cc \u067e\u0631\u062a\u060c API \u06c1\u06cc\u0646\u0688\u0644\u0631\u060c \u06cc\u0627 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u067e\u0648\u0627\u0626\u0646\u0679 \u0633\u06d2\u060c \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u067e\u06be\u06cc\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>safeString<\/code> \u0627\u06cc\u06a9 \u06c1\u06cc \u0641\u06cc\u0644\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 5 \u0645\u062e\u062a\u0644\u0641 \u0645\u0642\u0627\u0645\u0627\u062a \u06a9\u0627 \u06c1\u0648\u0646\u0627 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u0627\u0634\u0627\u0631\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0646\u0627\u0631\u0645\u0644\u0627\u0626\u0632\u06cc\u0634\u0646 \u0627\u067e \u0627\u0633\u0679\u0631\u06cc\u0645 \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0648\u0633\u0631\u0627\u060c \u0645\u0639\u0646\u06cc \u062e\u06cc\u0632 \u0645\u062a\u0628\u0627\u062f\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u062a\u0628\u062f\u06cc\u0644\u06cc (\u062e\u0627\u0644\u06cc \u062a\u0627\u0631\u060c <code>0<\/code>\u062e\u0627\u0644\u06cc \u0635\u0641\u06cc\u06ba \u0627\u0648\u0631 \u062e\u0627\u0644\u06cc \u0627\u0634\u06cc\u0627\u0621) \u0645\u062d\u0641\u0648\u0638 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0628\u0639\u0636 \u0627\u0648\u0642\u0627\u062a \u06af\u0645\u0631\u0627\u06c1 \u06a9\u0646 \u06c1\u06cc\u06ba\u06d4 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0688\u0633\u067e\u0644\u06d2 \u0646\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2: <code>safeString(name, \"Anonymous\")<\/code> \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0641\u0627\u0626\u062f\u06c1 \u0645\u0646\u062f <code>safeString(name)<\/code>. \u0627\u0633 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u0688\u0648\u0645\u06cc\u0646 \u0645\u06cc\u06ba \u06c1\u0631 \u0641\u06cc\u0644\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06cc\u0627 \u0645\u0646\u0627\u0633\u0628 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u06cc\u0633\u0631\u0627\u060c \u0627\u067e\u0646\u06cc \u0642\u0633\u0645 \u06a9\u06cc \u062a\u0639\u0631\u06cc\u0641\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u0645\u0627\u0646\u062f\u0627\u0631 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0645\u06cc\u062f\u0627\u0646 \u062d\u0642\u06cc\u0642\u062a\u0627\u064b \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u06d4 <code>null<\/code> \u06cc\u0627 <code>undefined<\/code> \u0622\u067e \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u06a9\u06cc \u0642\u0633\u0645 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646 \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0633 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0641\u06cc\u0644\u0688\u0632 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba: <code>string<\/code> \u0627\u06cc\u0633\u0627 \u06a9\u0628 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u061f <code>null<\/code> \u06cc\u06c1 \u0635\u0631\u0641 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0641\u0627\u062f\u06cc\u062a \u0627\u0633 \u0648\u0642\u062a \u0628\u06c1\u062a\u0631\u06cc\u0646 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0628 \u0622\u067e \u06a9\u06cc \u0642\u0633\u0645 \u0622\u067e \u06a9\u0648 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062d\u0642\u06cc\u0642\u062a \u06a9\u06cc \u0639\u06a9\u0627\u0633\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0627\u06cc\u06a9 \u0646\u0627\u0631\u0645\u0644\u0627\u0626\u0632\u06cc\u0634\u0646 \u0645\u0627\u0688\u06cc\u0648\u0644 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06d2 \u062a\u0645\u0627\u0645 \u0646\u0627\u0631\u0645\u0644\u0627\u0626\u0632\u0631 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u067e\u0631 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c <code>src\/lib\/normalise.ts<\/code>. \u06cc\u06c1 \u062f\u0641\u0627\u0639\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0645\u0631\u06a9\u0632\u06cc \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0627\u0646\u0686\u0646\u06d2 \u0645\u06cc\u06ba \u0622\u0633\u0627\u0646\u060c \u0627\u0648\u0631 \u0627\u0637\u0644\u0627\u0642 \u06a9\u06cc \u0645\u0646\u0637\u0642 \u0633\u06d2 \u062f\u0648\u0631 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-things-to-avoid\">\u06a9\u0633 \u0686\u06cc\u0632 \u0633\u06d2 \u0628\u0686\u0646\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p>\u0627\u0633\u06cc \u0637\u0631\u062d\u060c \u06a9\u0686\u06be \u0637\u0631\u06cc\u0642\u0648\u06ba \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u0626\u06d2 \u06c1\u06cc\u06ba.<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0627\u0646 \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc\u0632 \u06a9\u0648 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0645\u0646\u0627\u0633\u0628 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u06cc \u062c\u06af\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u067e\u0648\u0631\u0627 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u062a\u0645\u0627\u0645 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0644\u067e\u06cc\u0679 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>safeString<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0630\u0631\u0627\u0626\u0639 \u0628\u06c1\u062a \u0645\u062a\u0636\u0627\u062f \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u0627\u0635\u0644\u0627\u062d\u0627\u062a \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba\u060c OpenAPI \u0648\u0636\u0627\u062d\u062a\u06cc\u06ba\u060c \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0627\u0633\u06a9\u06cc\u0645\u0627\u060c Zod \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642\u060c \u06cc\u0627 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u06cc \u0634\u06a9\u0644 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u0641\u0627\u062f\u06cc\u062a \u0646\u0638\u0627\u0645\u06cc \u062e\u0644\u0644 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u062c \u06a9\u06cc\u0633\u0632 \u0627\u0648\u0631 \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0648\u0633\u0631\u0627\u060c \u0627\u0633\u06d2 \u0645\u062a \u0686\u06be\u0648\u0691\u06cc\u06ba\u06d4 <code>safeObject<\/code> \u0644\u0641\u0627\u0641\u06c1 \u06cc\u06c1 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0633\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u0626\u06d2 \u067e\u0631\u06a9\u0634\u0634 \u06c1\u06d2\u06d4 <code>any<\/code> \u0622\u067e \u067e\u0631\u0627\u067e\u0631\u0679\u06cc\u0632 \u062a\u06a9 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0633\u06d2 \u0627\u062c\u062a\u0646\u0627\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>as any<\/code> Casts TypeScript \u0627\u0648\u0631 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0628\u0627\u0637\u0644 \u06a9\u0631 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>unknown<\/code> \u0642\u062f\u0631 \u0628\u06c1\u0631\u062d\u0627\u0644 \u062a\u0627\u0644\u06cc\u0641 \u06a9\u06cc \u063a\u0644\u0637\u06cc \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u06d2 \u06af\u06cc\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>safeObject<\/code> \u067e\u06c1\u0644\u06d2 \u0642\u062f\u0631 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0633 \u0641\u06cc\u0644\u0688 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0644\u0627\u060c \u0627\u0646\u0679\u0631\u0645\u06cc\u0688\u06cc\u0679 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0646\u06a9\u0627\u0644\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0646 \u0627\u0641\u0627\u062f\u06cc\u062a \u06a9\u0648 \u0645\u062a\u0635\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0686\u06be \u0627\u06cc\u0633\u0627 <code>safeString(safeArray(raw)[0])<\/code> \u06cc\u06c1 \u06a9\u0645\u067e\u06cc\u06a9\u0679 \u0646\u0638\u0631 \u0622 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633\u06d2 \u067e\u0691\u06be\u0646\u0627 \u0627\u0648\u0631 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u0634\u06a9\u0644 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u0646\u0679\u0631\u0645\u06cc\u0688\u06cc\u0679 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0646\u0627\u0645\u0632\u062f \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u0645\u06cc\u06ba \u0646\u06a9\u0627\u0644\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0648 \u0635\u0631\u0641 \u0627\u0633 \u0648\u062c\u06c1 \u0633\u06d2 \u0646\u06c1 \u0686\u06be\u0648\u0691\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 &quot;\u0645\u06cc\u06ba \u0646\u06d2 API \u0644\u06a9\u06be\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0645\u06cc\u06ba \u062c\u0627\u0646\u062a\u0627 \u06c1\u0648\u06ba \u06a9\u06c1 \u06cc\u06c1 \u06a9\u06cc\u0627 \u0644\u0648\u0679\u062a\u0627 \u06c1\u06d2&#8221; \u0627\u06cc\u06a9 \u0645\u0639\u0642\u0648\u0644 \u0645\u0648\u0642\u0641 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u062f\u0648\u0633\u0631\u06cc \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062b\u0627\u0628\u062a \u0646\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u0627\u060c \u06a9\u0627\u0644\u0639\u062f\u0645 \u06a9\u0627\u0644\u0645 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627\u060c \u06cc\u0627 \u0627\u06cc\u062c \u06a9\u06cc\u0633\u0632 \u062c\u0646 \u067e\u0631 \u063a\u0648\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 \u0679\u0631\u0633\u0679 \u0627\u0641\u0627\u062f\u06cc\u062a\u060c \u0645\u06cc\u0645\u0648\u0631\u06cc \u0646\u06c1\u06cc\u06ba.<\/p>\n<h2 id=\"heading-bonus-combine-them-into-a-safedata-helper\">\u0628\u0648\u0646\u0633: \u0627\u0646 \u06a9\u0648 \u06cc\u06a9\u062c\u0627 \u06a9\u0631\u06cc\u06ba\u06d4 <code>safeData<\/code> \u0645\u062f\u062f\u06af\u0627\u0631<\/h2>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u06a9\u062b\u0631 \u0686\u0627\u0631\u0648\u06ba \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc\u0632 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba (\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 API \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u0648 \u0645\u0633\u062a\u0642\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0639\u0645\u0648\u0644 \u067e\u0631 \u0644\u0627\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u0627\u0646\u06c1\u06cc\u06ba \u0627\u06cc\u06a9 \u0631\u0648\u0627\u0646\u06cc \u0633\u06d2 \u0645\u062f\u062f\u06af\u0627\u0631 \u0645\u06cc\u06ba \u062a\u0631\u062a\u06cc\u0628 \u062f\u06d2 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba)\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ utils\/safeData.ts\nimport { safeArray, safeString, safeNumber, safeObject } from \".\/safe\";\n\ntype SafeDataAccessors = {\n  string: (key: string, fallback?: string) => string;\n  number: (key: string, fallback?: number) => number;\n  array: <t>(key: string) => T[];\n  object: <t extends=\"\" object=\"\">(key: string, fallback?: T) => T;\n};\n\nexport function safeData(raw: unknown): SafeDataAccessors {\n  const obj = safeObject<record unknown=\"\">>(raw);\n\n  return {\n    string: (key, fallback = \"\") => safeString(obj[key], fallback),\n    number: (key, fallback = 0) => safeNumber(obj[key], fallback),\n    array: <t>(key: string) => safeArray<t>(obj[key]),\n    object: <t extends=\"\" object=\"\">(key: string, fallback = {} as T) =>\n      safeObject<t>(obj[key], fallback),\n  };\n}\n<\/t><\/t><\/t><\/t><\/record><\/t><\/t><\/code><\/pre>\n<p>\u0646\u0627\u0631\u0645\u0644\u0627\u0626\u0632\u06cc\u0634\u0646 \u0641\u0646\u06a9\u0634\u0646 \u067e\u06be\u0631 \u0635\u0627\u0641 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0686\u0627\u06c1\u06d2 \u0648\u06c1 \u0631\u06cc \u0627\u06cc\u06a9\u0679 \u06c1\u06a9\u060c \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0631\u0648\u0679\u060c \u06cc\u0627 \u06a9\u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06c1\u0648\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { safeData } from \"@\/utils\/safeData\";\n\nfunction normaliseUser(raw: unknown) {\n  const d = safeData(raw);\n  return {\n    id: d.number(\"id\"),\n    name: d.string(\"name\", \"Unknown User\"),\n    email: d.string(\"email\"),\n    tags: d.array<string>(\"tags\"),\n  };\n}\n<\/string><\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u067e\u062a\u0644\u06cc \u062a\u062c\u0631\u06cc\u062f \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u062c\u0627\u062f\u0648 \u0627\u0648\u0631 \u062a\u06be\u0648\u0691\u0627 \u0633\u0627 \u062a\u06a9\u0631\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0631\u06cc\u06af\u0648\u0644\u0631\u0627\u0626\u0632\u06cc\u0634\u0646 \u0641\u0646\u06a9\u0634\u0646 \u0644\u0641\u0638\u06cc \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0679\u06cc\u0645 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc \u06a9\u0627\u0644 \u06a9\u0627\u0641\u06cc \u0648\u0627\u0636\u062d \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>JavaScript \u06a9\u0627 \u0688\u06be\u06cc\u0644\u0627 \u0642\u0633\u0645 \u06a9\u0627 \u0646\u0638\u0627\u0645 \u0627\u0648\u0631 TypeScript \u06a9\u0627 \u06a9\u0645\u067e\u0627\u0626\u0644 \u0679\u0627\u0626\u0645 \u0635\u0631\u0641 \u0636\u0645\u0627\u0646\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u0688\u06cc\u0679\u0627 \u0628\u0627\u0624\u0646\u0688\u0631\u06cc \u067e\u0631 \u062e\u0644\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 APIs\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0628\u0627\u0688\u06cc\u0632\u060c \u0645\u0642\u0627\u0645\u06cc \u0633\u0679\u0648\u0631\u06cc\u062c\u060c \u0627\u0648\u0631 \u0641\u0631\u06cc\u0642 \u062b\u0627\u0644\u062b \u0627\u0633\u06a9\u0631\u067e\u0679\u0633 \u0633\u06d2 \u062e\u0627\u0631\u062c\u06cc \u0688\u06cc\u0679\u0627 \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u067e\u06c1\u0646\u0686 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u06af\u0627\u0631\u0646\u0679\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0627\u067e\u0646\u06cc \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062f\u06c1 \u0634\u06a9\u0644 \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u06c1\u0648\u06af\u0627\u06d4 \u06cc\u06c1 \u0686\u0627\u0631 \u0627\u0641\u0627\u062f\u06cc\u062a\u06cc\u06ba \u0627\u0633 \u062e\u0644\u0627 \u06a9\u0648 \u067e\u064f\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><code>safeArray<\/code>\u060c <code>safeString<\/code>\u060c <code>safeNumber<\/code>\u0627\u0648\u0631 <code>safeObject<\/code> \u06c1\u0631 \u0627\u06cc\u06a9 \u0642\u0628\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 <code>unknown<\/code>\u0627\u0635\u0644 \u0642\u0633\u0645 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06af\u0631 \u0642\u062f\u0631 \u062a\u0648\u0642\u0639 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648 \u062a\u0648 \u0645\u062d\u0641\u0648\u0638 \u0645\u062a\u0628\u0627\u062f\u0644 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 React \u0627\u062c\u0632\u0627\u0621\u060c Node.js \u0631\u0648\u0679\u0633\u060c \u06a9\u0633\u0679\u0645 \u06c1\u06a9\u0633\u060c \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba\u060c \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u062f\u0648\u0633\u0631\u06d2 JavaScript \u06cc\u0627 TypeScript \u06a9\u06d2 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0688\u06cc\u0679\u0627 \u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u062f\u0627\u062e\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u06cc\u0679\u0631\u0646 \u0633\u0627\u062f\u06c1 \u06c1\u06d2. \u062f\u0627\u0626\u0631\u06c1 \u0645\u06cc\u06ba \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u062f\u0631 \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0648\u0688\u0628\u06cc\u0633 \u0645\u06cc\u06ba \u062f\u0627\u062e\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0645\u0642\u0627\u0645 \u067e\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0645\u0639\u0645\u0648\u0644 \u067e\u0631 \u0644\u0627\u0646\u06d2 \u0633\u06d2 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0646\u06cc\u0686\u06d2 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u063a\u0644\u0637 \u0627\u0646 \u067e\u0679 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u062f\u0641\u0627\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0635\u0644 \u06a9\u0627\u0645 \u067e\u0631 \u062a\u0648\u062c\u06c1 \u0645\u0631\u06a9\u0648\u0632 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u062a\u0635\u0648\u06cc\u0631 \u06a9\u06be\u06cc\u0646\u0686\u0648\u06d4 \u062c\u0628 API \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 API \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0648\u0627\u067e\u0633 \u0645\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba \u062a\u0648 \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0633\u0628 \u06a9\u0686\u06be \u0679\u06be\u06cc\u06a9 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0631\u0636\u06cc \u0688\u06cc\u0679\u0627 \u0635\u0627\u0641 \u06c1\u06d2\u060c \u0627\u0642\u0633\u0627\u0645 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0633\u0628 \u06a9\u0686\u06be \u0686\u06cc\u06a9 \u0622\u0624\u0679 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-26122","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/26122","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=26122"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/26122\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=26122"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=26122"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=26122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}