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);
                    case 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;
            }
function narrowType(type, expr, assumeTrue) {
                switch (expr.kind) {
                    case 168 :
                        return narrowTypeByTypePredicate(type, expr, assumeTrue);
                    case 172 :
                        return narrowType(type, expr.expression, assumeTrue);
                    case 181 :
                        var operator = expr.operatorToken.kind;
                        if (operator === 32  || operator === 33 ) {
                            return narrowTypeByEquality(type, expr, assumeTrue);
                        }
                        else if (operator === 51 ) {
                            return narrowTypeByAnd(type, expr, assumeTrue);
                        }
                        else if (operator === 52 ) {
                            return narrowTypeByOr(type, expr, assumeTrue);
                        }
                        else if (operator === 91 ) {
                            return narrowTypeByInstanceof(type, expr, assumeTrue);
                        }
                        break;
                    case 179 :
                        if (expr.operator === 49 ) {
                            return narrowType(type, expr.operand, !assumeTrue);
                        }
                        break;
                }
                return type;
            }
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 ) ; case 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 ; }
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.
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 .