import { LocalVariable } from "#csharp/code-dom/variable";
import { TypeDeclaration } from "#csharp/code-dom/type-declaration";
import { OneOrMoreStatements, Statements } from "#csharp/code-dom/statements/statement";
import { Parameter } from "#csharp/code-dom/parameter";
import { Async } from "#csharp/code-dom/access-modifier";
export declare type ExpressionOrLiteral = Expression | string;
export declare function toExpression(expression: ExpressionOrLiteral): Expression;
export declare function valueOf(expression: ExpressionOrLiteral): string;
/** An expression is a combination of operands (variables, literals, method calls) and operators that can be evaluated to a single value  */
export interface Expression {
    value: string;
    toString(): string;
}
/** an expression of a constant string value  */
export declare class StringExpression implements Expression {
    value: string;
    constructor(value: string);
    toString(): string;
}
/** an arbitrary user-defined expression  */
export declare class LiteralExpression implements Expression {
    value: string;
    constructor(value: string);
    toString(): string;
}
/** a c# 'is' expression */
export declare function Is(expression: ExpressionOrLiteral, isType: TypeDeclaration): Expression;
/** a c# 'is' expression */
export declare class IsExpression implements Expression {
    expression: ExpressionOrLiteral;
    isType: TypeDeclaration;
    constructor(expression: ExpressionOrLiteral, isType: TypeDeclaration);
    readonly value: string;
    toString(): string;
}
/** a c# 'is' expression that declares a local variable  */
export declare function IsDeclaration(expression: ExpressionOrLiteral, isType: TypeDeclaration, name: string): IsExpressionDeclaration;
/** a c# 'is' expression that declares a local variable  */
export declare class IsExpressionDeclaration extends LocalVariable implements Expression {
    expression: ExpressionOrLiteral;
    isType: TypeDeclaration;
    constructor(expression: ExpressionOrLiteral, isType: TypeDeclaration, name: string);
    readonly check: Expression;
    readonly value: string;
    toString(): string;
}
export declare function Lambda(parameters: Array<Parameter>, body: OneOrMoreStatements, objectIntializer?: Partial<LambdaExpression>): void;
export declare class LambdaExpression extends Statements implements Expression {
    protected parameters: Array<Parameter>;
    protected body: OneOrMoreStatements;
    async: Async;
    constructor(parameters: Array<Parameter>, body: OneOrMoreStatements, objectIntializer?: Partial<LambdaExpression>);
    readonly value: string;
    toString(): string;
}
//# sourceMappingURL=expression.d.ts.map