import { TemplateRef, ViewContainerRef } from '@angular/core';
import * as i0 from "@angular/core";
export declare class NgVarContext<T = unknown> {
    $implicit: T;
    ngVar: T;
}
export declare class NgVar<T = unknown> {
    private templateRef;
    private vcRef;
    private _context;
    set ngVar(context: T);
    private hasView;
    constructor(templateRef: TemplateRef<NgVarContext<T>>, vcRef: ViewContainerRef);
    /** @internal */
    static ngVarUseVarTypeGuard: void;
    /**
     * Assert the correct type of the expression bound to the `ngVar` input within the template.
     *
     * The presence of this static field is a signal to the Ivy template type check compiler that
     * when the `NgVar` structural directive renders its template, the type of the expression bound
     * to `ngVar` should be narrowed in some way. For `NgVar`, the binding expression itself is used to
     * narrow its type, which allows the strictNullChecks feature of TypeScript to work with `NgVar`.
     */
    static ngTemplateGuard_ngVar: 'binding';
    /**
     * Asserts the correct type of the context for the template that `NgVar` will render.
     *
     * The presence of this method is a signal to the Ivy template type-check compiler that the
     * `NgVar` structural directive renders its template with a specific context type.
     */
    static ngTemplateContextGuard<T>(dir: NgVar<T>, ctx: any): ctx is NgVarContext<Exclude<T, false | 0 | '' | null | undefined>>;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgVar<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NgVar<any>, "[ngVar]", never, { "ngVar": { "alias": "ngVar"; "required": false; }; }, {}, never, never, false, never>;
}
