title: In Typescript, what is the ! (exclamation mark / bang) operator when dereferencing a member?
body: <p>When looking at the sourcecode for a tslint rule, I came across the following statement:</p>
  
  <pre><code>if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
      return;
  }
  </code></pre>
  
  <p>Notice the <code>!</code> operator after <code>node.parent</code>. Interesting!</p>
  
  <p>I first tried compiling the file locally with my currently installed version of TS (1.5.3). The resulting error pointed to the exact location of the bang:</p>
  
  <pre><code>$ tsc --noImplicitAny memberAccessRule.ts 
  noPublicModifierRule.ts(57,24): error TS1005: ')' expected.
  </code></pre>
  
  <p>Next I upgraded to the latest TS (2.1.6), which compiled it without issue. So it seems to be feature of TS 2.x. <strong>But</strong> the transpilation ignored the bang completely, resulting in the following JS:</p>
  
  <pre><code>if (node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression) {
      return;
  }
  </code></pre>
  
  <p>My Google fu has thus far failed me. </p>
  
  <p><strong><em>What is TS's exclamation mark operator, and how does it work?</em></strong></p>