<p dir="auto"><strong>TypeScript Version:</strong></p>
<p dir="auto">1.8.9</p>
<p dir="auto"><strong>Code</strong></p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// A self-contained demonstration of the problem follows...
export interface IHiddenColumns {
    hiddenColumns: string;
}

export class HiddenColumnsLoader {

    public loadHiddenColumns(): Promise&lt;void&gt; {

        return new Promise&lt;void&gt;((resolve, reject) =&gt; {

            let promises: Promise&lt;IHiddenColumns&gt;[] = [];

            // push promises
           // .forEach(structureContent =&gt; {
           //      promises.push(this.loadStructureHiddenColumns(structureContent.rowSectionDefinition, structureContent.columnSectionDefinition, provider));
           // });

            Promise
                .all(promises)
                .then((results) =&gt; {

                    // results should be typeof IHiddenColumns[] and not Promise&lt;IHiddenColumns[]&gt;. See stack below
                    this.resolveResults(results);

                    resolve();
                })
        });
    }

    private resolveResults(loadPageResults: IHiddenColumns[]) {
        // resolve
    }
}"><pre class="notranslate"><span class="pl-c">// A self-contained demonstration of the problem follows...</span>
<span class="pl-k">export</span> <span class="pl-k">interface</span> <span class="pl-smi">IHiddenColumns</span> <span class="pl-kos">{</span>
    <span class="pl-c1">hiddenColumns</span>: <span class="pl-smi">string</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span>

<span class="pl-k">export</span> <span class="pl-k">class</span> <span class="pl-smi">HiddenColumnsLoader</span> <span class="pl-kos">{</span>

    <span class="pl-k">public</span> <span class="pl-en">loadHiddenColumns</span><span class="pl-kos">(</span><span class="pl-kos">)</span>: <span class="pl-smi">Promise</span><span class="pl-kos">&lt;</span><span class="pl-smi"><span class="pl-k">void</span></span><span class="pl-kos">&gt;</span> <span class="pl-kos">{</span>

        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-smi">Promise</span><span class="pl-kos">&lt;</span><span class="pl-smi"><span class="pl-k">void</span></span><span class="pl-kos">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-s1">resolve</span><span class="pl-kos">,</span> <span class="pl-s1">reject</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-kos">{</span>

            <span class="pl-k">let</span> <span class="pl-s1">promises</span>: <span class="pl-smi">Promise</span><span class="pl-kos">&lt;</span><span class="pl-smi">IHiddenColumns</span><span class="pl-kos">&gt;</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>

            <span class="pl-c">// push promises</span>
           <span class="pl-c">// .forEach(structureContent =&gt; {</span>
           <span class="pl-c">//      promises.push(this.loadStructureHiddenColumns(structureContent.rowSectionDefinition, structureContent.columnSectionDefinition, provider));</span>
           <span class="pl-c">// });</span>

            <span class="pl-smi">Promise</span>
                <span class="pl-kos">.</span><span class="pl-en">all</span><span class="pl-kos">(</span><span class="pl-s1">promises</span><span class="pl-kos">)</span>
                <span class="pl-kos">.</span><span class="pl-en">then</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-s1">results</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-kos">{</span>

                    <span class="pl-c">// results should be typeof IHiddenColumns[] and not Promise&lt;IHiddenColumns[]&gt;. See stack below</span>
                    <span class="pl-smi">this</span><span class="pl-kos">.</span><span class="pl-en">resolveResults</span><span class="pl-kos">(</span><span class="pl-s1">results</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

                    <span class="pl-en">resolve</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
                <span class="pl-kos">}</span><span class="pl-kos">)</span>
        <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>

    <span class="pl-k">private</span> <span class="pl-en">resolveResults</span><span class="pl-kos">(</span><span class="pl-s1">loadPageResults</span>: <span class="pl-smi">IHiddenColumns</span><span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-c">// resolve</span>
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto"><strong>Expected behavior:</strong><br>
Compilation succeeded in Typescript 1.8.7.<br>
Failed in 1.8.9</p>
<p dir="auto">'results' inside Promise.all().then() should be considered typeof IHiddenColumns[]. Seems to be instead : Promise&lt;IHiddenColumns[]&gt;. See trace below.</p>
<p dir="auto"><strong>Actual behavior:</strong><br>
Compilation failed in 1.8.9 whereas it worked in 1.8.7 (and still works if I backward to 1.8.7).</p>
<p dir="auto">Here is the stacktrace :<br>
[11:39:07]<br>
42                              this.resolveResults(gridModel, results);<br>
~~~~~~~</p>
<p dir="auto">.../HiddenColumnsLoader.ts(42,37): error TS2345: Argument of type 'Promise[]' is not assignable to parameter of type 'IHiddenColumns[]'.<br>
Type 'Promise' is not assignable to type 'IHiddenColumns'.</p>
<p dir="auto"><strong>TypeScript Version:</strong></p>
<p dir="auto">1.8.9</p>
<p dir="auto"><strong>Code</strong></p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="Promise.all([Promise.resolve('')]);  // has type Promise&lt;Promise&lt;string&gt;[]&gt;"><pre class="notranslate"><span class="pl-smi">Promise</span><span class="pl-kos">.</span><span class="pl-en">all</span><span class="pl-kos">(</span><span class="pl-kos">[</span><span class="pl-smi">Promise</span><span class="pl-kos">.</span><span class="pl-en">resolve</span><span class="pl-kos">(</span><span class="pl-s">''</span><span class="pl-kos">)</span><span class="pl-kos">]</span><span class="pl-kos">)</span><span class="pl-kos">;</span>  <span class="pl-c">// has type Promise&lt;Promise&lt;string&gt;[]&gt;</span></pre></div>
<p dir="auto"><strong>Expected behavior:</strong><br>
The expression has type <code class="notranslate">Promise&lt;string[]&gt;</code> as in 1.8.7<br>
<strong>Actual behavior:</strong><br>
The expression has type <code class="notranslate">Promise&lt;Promise&lt;string&gt;[]&gt;</code></p>