export declare type BranchName<T extends ShippingBranch<any, any>> = T extends ShippingBranch<infer R, any> ? R : never;
export declare type BranchNodes<T extends ShippingBranch<any, any>> = T extends ShippingBranch<infer B, infer R> ? MergeUnion<B, keyof R> : never;
export declare type MergeUnion<X, Y> = [...[X], ...[Y]][number];
export declare type NodeAmount = {
    to: number;
    from: number;
};
export declare class ShippingBranch<T extends string, N extends Record<string, NodeAmount>> {
    protected name: T;
    protected Amounts: N;
    constructor(name: T, Amounts: N);
    has: (node: string) => boolean;
    getName: () => T;
    getNodes: () => Array<keyof N>;
    setAmount: (to: MergeUnion<T, keyof N>, amount: NodeAmount) => this;
    getAmount: (to: MergeUnion<T, keyof N>) => N[T | keyof N];
}
