<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Передача типов в TypeScript в под функции]]></title><description><![CDATA[<p dir="auto">Попробуем разобрать такую задачу, у нас есть большой конфиг типов который мы передаем в одну функцию, а эта функция передает часть данных в другую функцию. Но как же поступить с типами что бы не писать одно и тоже по нескольку раз.</p>
<p dir="auto">У нас есть файл типов:</p>
<pre><code class="language-ts">// Общий конфиг
type Config = {
  api: string;
  text: string;
  url: string;
};
</code></pre>
<p dir="auto">И есть главная функция:</p>
<pre><code class="language-ts">function main(config: Config) {
  const { api, text, url } = config;
  // Здесь нужно передать ТОЛЬКО часть в другую функцию
  otherFunction(config);
}
</code></pre>
<p dir="auto">А функции <code>otherFunction</code> требуется только <code>text: string;</code>.<br />
Да возможно вы скажете, а зачем так вообще заморачиваться если я могу в самый функции при аргумента это все делать. Говно вопрос если мы передаем 1, 2 аргумента, а если там целая тележка? Едем дальше</p>
<hr />
<h2>Решение #1</h2>
<p dir="auto">У TypeScript есть интересная утилита Pick&lt;T, K&gt;, чтобы выбрать подмножество полей из типа.<br />
Вот как это будет выглядеть на практике:</p>
<pre><code class="language-ts">type otherType= Pick&lt;Config, 'text'&gt;;

function otherFunction(config: otherType) {
  console.log(config.text);
}

function main(config: Config) {
  otherFunction(config); // ✅ TypeScript сам поймёт, что config содержит нужные поля
}
</code></pre>
<blockquote>
<p dir="auto">На заметку -  Pick это типобезопасно, не создаёт новых объектов, и не требует ручного копирования.</p>
</blockquote>
<hr />
<h2>Решение #2</h2>
<p dir="auto">Если мы не можем менять тип ёotherFunctionё, но можем передавать только нужные поля просто передаем объект с нужными ключами:</p>
<pre><code class="language-ts">function otherFunction({ text }: { text: string; }) {
  // ...
}

function main(config: Config) {
  otherFunction(config); // ✅ тоже сработает! (config совместим структурно)
  // ИЛИ явно:
  otherFunction({
    text: config.text,
  });
}
</code></pre>
<p dir="auto">TypeScript использует структурную типизацию, поэтому если объект содержит нужные поля он подходит.<br />
Да, такое решение тоже имеет месту быть, но первый вариант все же будет лаконичнее.</p>
<hr />
<h2>Решение #3</h2>
<p dir="auto">Иногда полезно, а иногда и нужно создать новый объект, чтобы передать только необходимое (например, для безопасности или логирования):</p>
<pre><code class="language-ts">function main(config: Config) {
  const otherConfig = {
    text: config.text,
  };
  otherFunction(otherConfig);
}
</code></pre>
<p dir="auto">Тип <code>otherConfig</code> будет выведен как <code>{ text: string }</code> - и это совместимо с <code>Pick&lt;Config, 'text'</code>&gt;.</p>
<hr />
<p dir="auto">Главное правило: не дублируй типы лучше используй утилиты TypeScript или другие варианты.<br />
Gереиспользование наше все! Но наверное новички и вообще уже не помнят про принципы ООП.</p>
]]></description><link>https://forum.exlends.ru/topic/324/peredacha-tipov-v-typescript-v-pod-funkcii</link><generator>RSS for Node</generator><lastBuildDate>Thu, 25 Jun 2026 13:26:07 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/324.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Dec 2025 12:58:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Передача типов в TypeScript в под функции on Fri, 12 Dec 2025 14:46:46 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/aladdin" aria-label="Profile: Aladdin">@<bdi>Aladdin</bdi></a> Ого, вот это кстати пипец какая полезная штука, как говорится - thank u very much!</p>
]]></description><link>https://forum.exlends.ru/post/1123</link><guid isPermaLink="true">https://forum.exlends.ru/post/1123</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Fri, 12 Dec 2025 14:46:46 GMT</pubDate></item><item><title><![CDATA[Reply to Передача типов в TypeScript в под функции on Fri, 12 Dec 2025 14:13:52 GMT]]></title><description><![CDATA[<p dir="auto">Так, я тут осознал, что ты не дораскрыл тему,   потому что  подмножество типов можно получить не  только с помошью <code>Pick</code>, но и через  <code>Omit</code> ,  первый удобен, когда  тебе надо <strong>меньшую</strong> часть  свойств взять в новый тип, а Omit когда <strong>большую</strong></p>
<p dir="auto">Пример:</p>
<pre><code class="language-ts">// Исходный тип
type User = {
  id: number;
  name: string;
  email: string;
  password: string;
  age: number;
  role: string;
};

// ✅ PICK - "возьми ЭТИ поля"
type PickExample = Pick&lt;User, 'id' | 'name' | 'email'&gt;;
/* 
  Результат:
  {
    id: number;
    name: string;
    email: string;
  }
  Только указанные поля!
*/

// ✅ OMIT - "все КРОМЕ этих"
type OmitExample = Omit&lt;User, 'password' | 'age'&gt;;
/* 
  Результат:
  {
    id: number;
    name: string;
    email: string;
    role: string;
  }
  Все поля, кроме указанных!
*/
</code></pre>
]]></description><link>https://forum.exlends.ru/post/1121</link><guid isPermaLink="true">https://forum.exlends.ru/post/1121</guid><dc:creator><![CDATA[Aladdin]]></dc:creator><pubDate>Fri, 12 Dec 2025 14:13:52 GMT</pubDate></item><item><title><![CDATA[Reply to Передача типов в TypeScript в под функции on Sun, 07 Dec 2025 12:22:23 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/aladdin" aria-label="Profile: Aladdin">@<bdi>Aladdin</bdi></a> а я кстати не пробовал, надо протестить.<br />
Опять же наследование принцип - ООП)))<br />
Можно вообще пора вернуться к классам ?</p>
]]></description><link>https://forum.exlends.ru/post/1027</link><guid isPermaLink="true">https://forum.exlends.ru/post/1027</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Sun, 07 Dec 2025 12:22:23 GMT</pubDate></item><item><title><![CDATA[Reply to Передача типов в TypeScript в под функции on Fri, 05 Dec 2025 13:28:02 GMT]]></title><description><![CDATA[<p dir="auto">а что думаешь про наследование  типов? Или шляпа?</p>
]]></description><link>https://forum.exlends.ru/post/1015</link><guid isPermaLink="true">https://forum.exlends.ru/post/1015</guid><dc:creator><![CDATA[Aladdin]]></dc:creator><pubDate>Fri, 05 Dec 2025 13:28:02 GMT</pubDate></item></channel></rss>