<p dir="auto">I'm currently using the tsconfig file in our project and I want to have two of them one that outputs es5 and one that outputs es6. Things are working great until I try and target es6 and run into the issue where I'm supplying a definition file for ES6-Promises.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="[TsProject] Compiling Project Files...
[TsProject] c:/Code/Exceptionless.JavaScript/node_modules/typescript/bin/lib.es6.d.ts(4727,11): error TS2300: Duplicate identifier 'Promise'.
[TsProject] c:/Code/Exceptionless.JavaScript/node_modules/typescript/bin/lib.es6.d.ts(4812,13): error TS2300: Duplicate identifier 'Promise'.
[TsProject] typings/es6-promise/es6-promise.d.ts(10,15): error TS2300: Duplicate identifier 'Promise'.
[TsProject] typings/es6-promise/es6-promise.d.ts(40,16): error TS2300: Duplicate identifier 'Promise'.
[TsProject] typings/es6-promise/es6-promise.d.ts(70,2): error TS1203: Export assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'export default' instead.
[TsProject] Build completed with errors. Outputs generated.
[12:17:44] Finished 'typescript' after 2.76 s"><pre class="notranslate"><code class="notranslate">[TsProject] Compiling Project Files...
[TsProject] c:/Code/Exceptionless.JavaScript/node_modules/typescript/bin/lib.es6.d.ts(4727,11): error TS2300: Duplicate identifier 'Promise'.
[TsProject] c:/Code/Exceptionless.JavaScript/node_modules/typescript/bin/lib.es6.d.ts(4812,13): error TS2300: Duplicate identifier 'Promise'.
[TsProject] typings/es6-promise/es6-promise.d.ts(10,15): error TS2300: Duplicate identifier 'Promise'.
[TsProject] typings/es6-promise/es6-promise.d.ts(40,16): error TS2300: Duplicate identifier 'Promise'.
[TsProject] typings/es6-promise/es6-promise.d.ts(70,2): error TS1203: Export assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'export default' instead.
[TsProject] Build completed with errors. Outputs generated.
[12:17:44] Finished 'typescript' after 2.76 s
</code></pre></div>
<p dir="auto">If you implement (so not extend) a class that has protected methods, you always get an error (typically used for a mix-in like pattern)</p>
<p dir="auto">Either you implement the method, but then the compiler complaints that you are not actually a subclass and therefor cannot implement a protected method. If you however omit the method and than the compiler complaints you are missing a method.</p>
<p dir="auto">Quick sample to illustrate:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="class A { 
     protected hello() {} 
 }

class B implements A {
    // protected hello() {} 
}"><pre class="notranslate"><code class="notranslate">class A { 
     protected hello() {} 
 }

class B implements A {
    // protected hello() {} 
}
</code></pre></div>
<p dir="auto">One possible solution would be the compiler should ignore protected (and private) properties when implementing a class, only seeing the public properties as part of the externally exposed interface of a class.</p>