import * as ts from 'typescript'; export declare function endsControlFlow(statement: ts.Statement | ts.BlockLike, checker?: ts.TypeChecker): boolean; export declare type ControlFlowStatement = ts.BreakStatement | ts.ContinueStatement | ts.ReturnStatement | ts.ThrowStatement | ts.ExpressionStatement & { expression: ts.CallExpression; }; export interface ControlFlowEnd { /** * Statements that may end control flow at this statement. * Does not contain control flow statements that jump only inside the statement, for example a `continue` inside a nested for loop. */ readonly statements: ReadonlyArray; /** `true` if control flow definitely ends. */ readonly end: boolean; } export declare function getControlFlowEnd(statement: ts.Statement | ts.BlockLike, checker?: ts.TypeChecker): ControlFlowEnd; export declare enum SignatureEffect { Never = 1, Asserts = 2 } /** * Dermines whether a top level CallExpression has a control flow effect according to TypeScript's rules. * This handles functions returning `never` and `asserts`. */ export declare function callExpressionAffectsControlFlow(node: ts.CallExpression, checker: ts.TypeChecker): SignatureEffect | undefined;