Angular 指定角度组件中泛型变量的类型
我正在尝试创建一个通用组件,该组件只能使用两种类型的数据:Angular 指定角度组件中泛型变量的类型,angular,typescript,Angular,Typescript,我正在尝试创建一个通用组件,该组件只能使用两种类型的数据: interface X{ name: string, path: string, type: string, } interface Y{ name: string, path: string, } 两种类型X、Y都有两个公共属性,而X有一个额外属性。 现在,我以这种方式定义类型: export class MyComponent<T extends X | Y> implemen
interface X{
name: string,
path: string,
type: string,
}
interface Y{
name: string,
path: string,
}
两种类型X、Y都有两个公共属性,而X有一个额外属性。
现在,我以这种方式定义类型:
export class MyComponent<T extends X | Y> implements OnInit{
@Input() data: T[];
func(item: T){
let temp = this.data.find(x => x.name === item.name);
<<....some code....>>
}
}
<my-component [data]="xList"></my-component> <!-- xList: X[] -->
<my-component [data]="yList"></my-component> <!-- yList: y[] -->
导出类MyComponent实现OnInit{
@输入()数据:T[];
func(项目:T){
让temp=this.data.find(x=>x.name==item.name);
}
}
通过以下方式从父组件调用此函数:
export class MyComponent<T extends X | Y> implements OnInit{
@Input() data: T[];
func(item: T){
let temp = this.data.find(x => x.name === item.name);
<<....some code....>>
}
}
<my-component [data]="xList"></my-component> <!-- xList: X[] -->
<my-component [data]="yList"></my-component> <!-- yList: y[] -->
这很好,但我不确定这是否是正确的方法。有谁能建议这里最好的方法吗?
我们可以在Typescript中编写类似于的东西,其中T实现了X | Y
或者我应该只使用
@Input()data:any[]
?我认为这很好,但我会做T扩展Y
只是因为type
键在X上是额外的,如果我们给它输入Y类型数组,这个组件就会断开,组件会把type
键弄乱。我不认为角度框架在它实例化MyComponent。我能想到的唯一一件事是在运行时获取组件的实例,并尝试自己设置泛型类型,这将产生任何差异,因为MyComponent
将已经实例化,并且将设置@Input()数据
我认为您应该只编写@Input()data:X[]| Y[]
不,此组件不使用类型键。@Input()data:X[]| Y[]
将导致此.data.find中的错误(X=>X.name==item.name)