import * as ts from "ts-morph";
import { CompilerState } from "../CompilerState";
export declare function isIdentifierDefinedInConst(exp: ts.Identifier): boolean;
export declare function isIdentifierDefinedInExportLet(exp: ts.Identifier): boolean;
/**
 * Gets the writable operand name, meaning the code should be able to do `returnValue = x;`
 * The rule in this case is that if there is a depth of 3 or more, e.g. `Foo.Bar.i`, we push `Foo.Bar`
 */
export declare function getWritableOperandName(state: CompilerState, operand: ts.Expression, doNotCompileAccess?: boolean): {
    expStr: string;
    isIdentifier: boolean;
};
/**
 * Similar to getWritableOperandName, but should push anything with any depth. This includes export let vars.
 */
export declare function getReadableExpressionName(state: CompilerState, exp: ts.Expression, expStr?: string): string;
export declare function compilePropertyAccessExpression(state: CompilerState, node: ts.PropertyAccessExpression): string;
export declare function addOneToArrayIndex(valueStr: string): string;
export declare function getComputedPropertyAccess(state: CompilerState, exp: ts.Expression, fromNode: ts.Node): string;
export declare function compileElementAccessBracketExpression(state: CompilerState, node: ts.ElementAccessExpression): string;
export declare function compileElementAccessDataTypeExpression(state: CompilerState, node: ts.ElementAccessExpression, expStr?: string): (argExpStr: string) => string;
export declare function compileElementAccessExpression(state: CompilerState, node: ts.ElementAccessExpression): string;
