import type { IConstruct } from 'constructs';
import type { CfnResource } from '../cfn-resource';
interface ITraitFactory<T> {
    forResource(resource: CfnResource): T;
}
export declare class Traits<Trait extends object, Factory extends ITraitFactory<Trait>> {
    private readonly sym;
    private readonly defaultFactoryFor;
    private instances;
    constructor(sym: symbol, defaultFactoryFor: (type: string) => Factory | undefined);
    of(resource: CfnResource): Trait | undefined;
    register(scope: IConstruct, cfnType: string, factory: Factory, sym: symbol): void;
    private lookupFactory;
}
export {};
