Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在TypeScript的嵌套泛型中创建实例_Angular_Typescript - Fatal编程技术网

Angular 在TypeScript的嵌套泛型中创建实例

Angular 在TypeScript的嵌套泛型中创建实例,angular,typescript,Angular,Typescript,我正在使用Angular 4开发应用程序。在我的代码中,我想从嵌套的泛型类创建一个实例,如下代码所示: export class Page<T> { constructor(c: { new(): T; }){ this.FilterData = new c(); } TotalItems: number; PageSize: number; CurrentPage: number; TotalPage: number;

我正在使用Angular 4开发应用程序。在我的代码中,我想从嵌套的泛型类创建一个实例,如下代码所示:

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;
}
导出类页面
{
构造函数(c:{new():T;}){
this.FilterData=new c();
}
合计项目:数量;
页面大小:数字;
当前页面:编号;
总页数:页数;
过滤数据:T;
}
导出类筛选器
{
构造函数(c:{new():T;})
{
this.AdvanceData=new c();
}
高级数据:T
IsAdvance:布尔型;
OrderMeThod:string;
OrderBy:string;
关键词:字符串;
}
导出类客户端
{
名称:字符串;
}
我不知道如何从
页面
初始化对象,其中
过滤器
客户端
在构造函数中初始化。我尝试过如下方法:
newpage()但它不起作用。

请帮我解决这个问题。谢谢

不要调用
new
,而是让您传递的函数返回新实例。 例如:

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);
接口生成器{
生成():T
}
导出类页面{
建造师(c:发电机){
this.FilterData=c.generate();
}
合计项目:数量;
页面大小:数字;
当前页面:编号;
总页数:页数;
过滤数据:T;
}
导出类筛选器{
建造师(c:发电机){
this.AdvanceData=c.generate();
}
高等数据:T;
IsAdvance:布尔型;
OrderMeThod:string;
OrderBy:string;
关键词:字符串;
}
导出类客户端{
名称:字符串;
}
常量客户端生成器:生成器={
生成:()=>新客户端()
};
常量过滤器生成器:生成器={
生成:()=>新筛选器(clientGenerator)
};
const pageOfFilterOfClient:Page=新页面(filterGenerator);

你不能。类型系统在运行时不存在,因此也不存在泛型约束。为什么不将实例传递给不同的构造函数呢?通过这些课程有什么原因吗?谢谢你的评论。下面的答案解决了我的问题。添加第三级(在
页面
)会使它更有趣,这就是问题所在about@Nitzan汤默:谢谢你回答我的问题。@Seaskyways:这对我有用。非常感谢。我认为它就像C#或Java