import { IAccount, IBundle, IEncounter, IEndpoint, IEpisodeOfCare, IOperationOutcome, IOrganization, IPatient, IPerson, IPractitionerRole, IRelatedPerson } from 'fhirtypes/dist/r4';
import { AttributeDefinition } from '../../../core/r4/validators/base/definitions';
export interface ResourceTypeMap {
    Account: IAccount;
    Bundle: IBundle;
    Encounter: IEncounter;
    Endpoint: IEndpoint;
    EpisodeOfCare: IEpisodeOfCare;
    OperationOutcome: IOperationOutcome;
    Organization: IOrganization;
    Patient: IPatient;
    Person: IPerson;
    PractitionerRole: IPractitionerRole;
    RelatedPerson: IRelatedPerson;
}
export type ResourceType = keyof ResourceTypeMap;
export type ResourceValue<T extends keyof ResourceTypeMap> = ResourceTypeMap[T];
export type ResourceTypesValues = ResourceTypeMap[keyof ResourceTypeMap];
type IsArray<T> = T extends Array<any> ? T : never;
type ExtractUnderscoreArrayKeys<T> = {
    [K in keyof T]: K extends `_${string}` ? (IsArray<T[K]> extends never ? never : K) : never;
}[keyof T];
export type PickUnderscoreArrayProperties<T> = Pick<T, ExtractUnderscoreArrayKeys<T>>;
export type NonUnderscoreKeys<T> = Extract<{
    [K in keyof T]: K extends `_${string}` ? never : K;
}[keyof T], keyof T>;
export type UnderscoreKeys<T> = Extract<{
    [K in keyof T]: K extends `_${string}` ? K : never;
}[keyof T], keyof T>;
export declare function validateFields<T extends object>(modelFields: readonly AttributeDefinition<T>[], instance: any): void;
export {};
