简体   繁体   中英

Create instances in nested generics for TypeScript

I'm developing app using Angular 4. In my code, i would like create an instance from nested generic class as following code:

export class Page<T>
{
    constructor(c: { new(): T; }){
       this.FilterData = new c();
    }
    TotalItems: number;
    PageSize: number;
    CurrentPage: number;
    TotalPage: number;
    FilterData: T;
}

export class Filter<T>
{
    constructor(c: { new(): T; })
    {
        this.AdvanceData = new c();
    }
    AdvanceData: T
    IsAdvance: boolean;
    OrderMeThod: string;
    OrderBy: string;
    KeyWord: string;
}
export class Client
{
Name:string;
}

And I don't know how can I initial object from Page<Filter<Client>> in which Filter and Client are initialed in constructor. I have tried such as: new Page<Filter<Client>>(); but it didn't work. Kindly help me to resolve that problem. Thanks

Instead of calling new , have the function you're passing return the new instance. Example:

interface Generator<T> {
    generate(): T
}

export class Page<T> {
    constructor(c: Generator<T>) {
        this.FilterData = c.generate();
    }

    TotalItems: number;
    PageSize: number;
    CurrentPage: number;
    TotalPage: number;
    FilterData: T;
}

export class Filter<T> {
    constructor(c: Generator<T>) {
        this.AdvanceData = c.generate();
    }

    AdvanceData: T;
    IsAdvance: boolean;
    OrderMeThod: string;
    OrderBy: string;
    KeyWord: string;
}

export class Client {
    Name: string;
}

const clientGenerator: Generator<Client> = {
    generate: () => new Client()
};

const filterGenerator: Generator<Filter<Client>> = {
    generate: () => new Filter(clientGenerator)
};

const pageOfFilterOfClient: Page<Filter<Client>> = new Page(filterGenerator);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM