nl_tokens: Narrow the given type based on the given expression having the assumed boolean value . The returned type will be a subtype or the same type as the argument .
pl_tokens: function narrowType ( type , expr , assumeTrue ) { switch ( expr . kind ) { case 168 /* CallExpression */ : return narrowTypeByTypePredicate ( type , expr , assumeTrue ) ; case 172 /* ParenthesizedExpression */ : return narrowType ( type , expr . expression , assumeTrue ) ; <mask> 181 /* BinaryExpression */ : var operator = expr . operatorToken . kind ; if ( operator === 32 /* EqualsEqualsEqualsToken */ || operator === 33 /* ExclamationEqualsEqualsToken */ ) { return narrowTypeByEquality ( type , expr , assumeTrue ) ; } else if ( operator === 51 /* AmpersandAmpersandToken */ ) { return narrowTypeByAnd ( type , expr , assumeTrue ) ; } else if ( operator === 52 /* BarBarToken */ ) { return narrowTypeByOr ( type , expr , assumeTrue ) ; } else if ( operator === 91 /* InstanceOfKeyword */ ) { return narrowTypeByInstanceof ( type , expr , assumeTrue ) ; } break ; case 179 /* PrefixUnaryExpression */ : if ( expr . operator === 49 /* ExclamationToken */ ) { return narrowType ( type , expr . operand , ! assumeTrue ) ; } break ; } return type ; }