<p dir="auto">Circular dependencies are a huge issue when working with third party tooling (graphing dependencies, integrating into other build systems etc).</p>
<p dir="auto">I think the correct solution here would be to put @types/react in the bundleDependencies (<a href="https://docs.npmjs.com/files/package.json#bundleddependencies" rel="nofollow">https://docs.npmjs.com/files/package.json#bundleddependencies</a>) attribute in package.json to make the circular dependency invisible to consumers of this package.</p>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I tried using the <code class="notranslate">@types/xxxx</code> package and had problems.</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I tried using the latest stable version of tsc. <a href="https://www.npmjs.com/package/typescript" rel="nofollow">https://www.npmjs.com/package/typescript</a></li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have a question that is inappropriate for <a href="https://stackoverflow.com/" rel="nofollow">StackOverflow</a>.  (Please ask any appropriate questions there).</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> <a href="https://github.com/blog/821-mention-somebody-they-re-notified">Mention</a> the authors (see <code class="notranslate">Definitions by:</code> in <code class="notranslate">index.d.ts</code>) so they can respond.
<ul dir="auto">
<li>Authors: <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/DovydasNavickas/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DovydasNavickas">@DovydasNavickas</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/ferdaber/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ferdaber">@ferdaber</a></li>
</ul>
</li>
</ul>
<p dir="auto">Possible duplicate of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="408150561" data-permission-text="Title is private" data-url="https://github.com/DefinitelyTyped/DefinitelyTyped/issues/32899" data-hovercard-type="issue" data-hovercard-url="/DefinitelyTyped/DefinitelyTyped/issues/32899/hovercard" href="https://github.com/DefinitelyTyped/DefinitelyTyped/issues/32899">#32899</a></p>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I tried using the <code class="notranslate">@types/xxxx</code> package and had problems.</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I tried using the latest stable version of tsc. <a href="https://www.npmjs.com/package/typescript" rel="nofollow">https://www.npmjs.com/package/typescript</a></li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox"> I have a question that is inappropriate for <a href="https://stackoverflow.com/" rel="nofollow">StackOverflow</a>.  (Please ask any appropriate questions there).</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> <a href="https://github.com/blog/821-mention-somebody-they-re-notified">Mention</a> the authors (see <code class="notranslate">Definitions by:</code> in <code class="notranslate">index.d.ts</code>) so they can respond.
<ul dir="auto">
<li>Authors: <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tkqubo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tkqubo">@tkqubo</a> @kenzierocks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/clayne11/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clayne11">@clayne11</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/tansongyang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/tansongyang">@tansongyang</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/NicholasBoll/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/NicholasBoll">@NicholasBoll</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mDibyo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mDibyo">@mDibyo</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/pdeva/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pdeva">@pdeva</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/Kallikrein/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Kallikrein">@Kallikrein</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/jrakotoharisoa/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jrakotoharisoa">@jrakotoharisoa</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/apapirovski/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/apapirovski">@apapirovski</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/surgeboris/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/surgeboris">@surgeboris</a> <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/soerenbf/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/soerenbf">@soerenbf</a></li>
</ul>
</li>
</ul>
<p dir="auto"><strong>bug</strong><br>
<code class="notranslate">connect</code> has inaccurate type checking.  Consider the following example:</p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="interface IProps {
  a: Ta;
  b: Tb;
  c: Tc;
}

const mapStateToProps: (state: IState) =&gt; Pick&lt;IProps, &quot;a&quot;&gt; = ...
const mapDispatchToProps: (dispatch: Dispatch) =&gt; Pick&lt;IProps, &quot;b&quot;&gt; = ...

const MyComponent: (props: IProps) =&gt; JSX.Element = ...

export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);"><pre class="notranslate"><span class="pl-k">interface</span> <span class="pl-smi">IProps</span> <span class="pl-kos">{</span>
  <span class="pl-c1">a</span>: <span class="pl-smi">Ta</span><span class="pl-kos">;</span>
  <span class="pl-c1">b</span>: <span class="pl-smi">Tb</span><span class="pl-kos">;</span>
  <span class="pl-c1">c</span>: <span class="pl-smi">Tc</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span>

<span class="pl-k">const</span> <span class="pl-s1">mapStateToProps</span>: <span class="pl-kos">(</span><span class="pl-s1">state</span>: <span class="pl-smi">IState</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-smi">Pick</span><span class="pl-kos">&lt;</span><span class="pl-smi">IProps</span><span class="pl-kos">,</span> <span class="pl-s">"a"</span><span class="pl-kos">&gt;</span> <span class="pl-c1">=</span> ...
<span class="pl-k">const</span> <span class="pl-s1">mapDispatchToProps</span>: <span class="pl-kos">(</span><span class="pl-s1">dispatch</span>: <span class="pl-smi">Dispatch</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-smi">Pick</span><span class="pl-kos">&lt;</span><span class="pl-smi">IProps</span><span class="pl-kos">,</span> <span class="pl-s">"b"</span><span class="pl-kos">&gt;</span> <span class="pl-c1">=</span> ...

<span class="pl-k">const</span> <span class="pl-smi">MyComponent</span>: <span class="pl-kos">(</span><span class="pl-s1">props</span>: <span class="pl-smi">IProps</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-smi">JSX</span><span class="pl-kos">.</span><span class="pl-smi">Element</span> <span class="pl-c1">=</span> ...

<span class="pl-k">export</span> <span class="pl-s1">default</span> <span class="pl-en">connect</span><span class="pl-kos">(</span><span class="pl-s1">mapStateToProps</span><span class="pl-kos">,</span> <span class="pl-s1">mapDispatchToProps</span><span class="pl-kos">)</span><span class="pl-kos">(</span><span class="pl-smi">MyComponent</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<p dir="auto"><strong>What is the current behavior?</strong><br>
There is no TypeScript compilation error, so the type system becomes inaccurate.</p>
<p dir="auto"><strong>What is the expected behavior?</strong><br>
The last line should throw a typescript compilation error, because <code class="notranslate">Pick&lt;IProps, "a"&gt; &amp; Pick&lt;IProps, "b"&gt;</code> is incompatible with <code class="notranslate">IProps</code>, as it is missing property <code class="notranslate">c</code>.</p>
<p dir="auto"><strong>Which versions of React, ReactDOM/React Native, Redux, and React Redux are you using?  Which browser and OS are affected by this issue? Did this work in previous versions of React Redux?</strong><br>
<code class="notranslate">@types/react-redux@7.0.1</code><br>
<code class="notranslate">react-redux@6.0.0</code></p>