//// [tests/cases/compiler/derivedInterfaceCallSignature.ts] ////

//// [derivedInterfaceCallSignature.ts]
interface D3SvgPath {
    (data: any, index?: number): string;

    x(): (data: any, index?: number) => number;
    y(): (data: any, index?: number) => number;
    interpolate(): string;
    tension(): number;
    defined(): (data: any, index?: number) => boolean;
}

interface D3SvgArea extends D3SvgPath {
    x(x: (data: any, index?: number) => number): D3SvgArea;
    y(y: (data: any, index?: number) => number): D3SvgArea;
    y0(): (data: any, index?: number) => number;
    y0(y: number): D3SvgArea;
    y0(y: (data: any, index?: number) => number): D3SvgArea;
    y1(): (data: any, index?: number) => number;
    y1(y: number): D3SvgArea;
    y1(y: (data: any, index?: number) => number): D3SvgArea;

    interpolate(interpolator: string): D3SvgArea;
    tension(tension: number): D3SvgArea;
    defined(defined: (data: any, index?: number) => boolean): D3SvgArea;
}

declare var area: D3SvgArea;
area.interpolate('two')('one');

//// [derivedInterfaceCallSignature.js]
"use strict";
area.interpolate('two')('one');
