title: What does "use strict" add for TypeScript code?
body: <p>This question is a copy of <a href="https://stackoverflow.com/questions/31391760/use-strict-needed-in-a-typescript-file">“Use Strict” needed in a TypeScript file?</a></p>
  
  <p>There are some answers, but it is not clear for what does "use strict" statement in TypeScript, when tsc shoes me strict mode errors without this statement. </p>
  
  <p>But decided to ask as separated question aw well.</p>
  
  <p>I am using TypeScript 1.6 and for me it is not clear what does "use strict" statement add in TypeScript?</p>
  
  <p>Using "use strict"; statement looks like double check.
  Since tsc shows strict mode errors without this statement.</p>
  
  <p>For example:</p>
  
  <pre><code>class Foo {
  03;
  constructor(public name:string) {
  }
  
  move(meters:number) {
  
      let o = {p: 1, p: 2};
  
      let a;
      delete a;
      alert(this.name + " moved " + meters + "m.");
  
  }
  
  sum(a:number, a:number, c:number):number { 
      var sum = 015 +
          197 +
          142;
  
  
      var x = 17;
      with (obj)
      {
          x;
      }
  
      [1, 2, 3, 4, 5].map(function (n) {
          return !(n &gt; 1) ? 1 : arguments.callee(n - 1) * n;
      });
  
      delete sum;
  
      return a + b + c;
  }
  </code></pre>
  
  <p>tsc shows me:</p>
  
  <blockquote>
    <ul>
    <li>Error:(16, 19) TS2300: Duplicate identifier 'a'.</li>
    <li>Error:(24, 9) TS1101: 'with' statements are not allowed in strict mode.</li>
    <li>Error:(8, 18) TS2300: Duplicate identifier 'p'.</li>
    <li>Error:(2, 5) TS1121: Octal literals are not allowed in strict mode.</li>
    <li>Error:(11, 16) TS1102: 'delete' cannot be called on an identifier in strict mode.</li>
    <li>Error:(16, 9) TS2300: Duplicate identifier 'a'.</li>
    <li>Error:(8, 24) TS1117: An object literal cannot have multiple properties with the same name in strict mode.</li>
    <li>Error:(8, 24) TS2300: Duplicate identifier 'p'.</li>
    </ul>
  </blockquote>