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<ControlFlowStatement>; | |
/** `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; |