<p dir="auto">Ambient class declarations implementing an interface require the user to repeat the type members declared in the interface.</p>
<p dir="auto">For example with the interface</p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="interface IFoo {
    bar: string;
    qux(): number;
}"><pre class="notranslate"><span class="pl-k">interface</span> <span class="pl-smi">IFoo</span> <span class="pl-kos">{</span>
    <span class="pl-c1">bar</span>: <span class="pl-smi">string</span><span class="pl-kos">;</span>
    <span class="pl-c1">qux</span><span class="pl-kos">(</span><span class="pl-kos">)</span>: <span class="pl-smi">number</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto">an ambient declaration of <code class="notranslate">Foo</code> as</p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="declare class Foo implements IFoo {}"><pre class="notranslate"><span class="pl-k">declare</span> <span class="pl-k">class</span> <span class="pl-smi">Foo</span> <span class="pl-k">implements</span> <span class="pl-smi">IFoo</span> <span class="pl-kos">{</span><span class="pl-kos">}</span></pre></div>
<p dir="auto">fails with <code class="notranslate">Class 'Foo' incorrectly implements interface 'IFoo'. Property 'bar' is missing in type 'Foo'</code>, while the following works as expected, but duplicates all declarations:</p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="declare class Foo implements IFoo {
    bar: string;
    qux(): number;
}"><pre class="notranslate"><span class="pl-k">declare</span> <span class="pl-k">class</span> <span class="pl-smi">Foo</span> <span class="pl-k">implements</span> <span class="pl-smi">IFoo</span> <span class="pl-kos">{</span>
    <span class="pl-c1">bar</span>: <span class="pl-smi">string</span><span class="pl-kos">;</span>
    <span class="pl-c1">qux</span><span class="pl-kos">(</span><span class="pl-kos">)</span>: <span class="pl-smi">number</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto">While it should be possible to specialise when declaring an ambient class, it would be very convenient if unchanged type members would not need to be redeclared.</p>
<p dir="auto"><a href="http://typescript.codeplex.com/workitem/1125" rel="nofollow">http://typescript.codeplex.com/workitem/1125</a></p>
<p dir="auto">Following should be allowed:</p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="interface IFoo {
    foo();
}

declare class Foo implements IFoo {}"><pre class="notranslate"><span class="pl-k">interface</span> <span class="pl-smi">IFoo</span> <span class="pl-kos">{</span>
    <span class="pl-c1">foo</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">declare</span> <span class="pl-k">class</span> <span class="pl-smi">Foo</span> <span class="pl-k">implements</span> <span class="pl-smi">IFoo</span> <span class="pl-kos">{</span><span class="pl-kos">}</span></pre></div>
<p dir="auto">If abstract classes are added in the future, they would inherit all interface methods as abstract (like in Java).</p>