Angular 在TypeScript的嵌套泛型中创建实例
我正在使用Angular 4开发应用程序。在我的代码中,我想从嵌套的泛型类创建一个实例,如下代码所示: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;
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