Javascript 如何使用带有or条件的typescript接口
我不熟悉打字稿。这里,我有下面的代码,看起来像Javascript 如何使用带有or条件的typescript接口,javascript,angular,reactjs,typescript,Javascript,Angular,Reactjs,Typescript,我不熟悉打字稿。这里,我有下面的代码,看起来像 interface FirstOriginal { active: boolean; status: boolean; } interface Product { id: number; name: string; Original: FirstOriginal; } interface MainProduct { id: number; Name: string; Original: Product; } c
interface FirstOriginal {
active: boolean;
status: boolean;
}
interface Product {
id: number;
name: string;
Original: FirstOriginal;
}
interface MainProduct {
id: number;
Name: string;
Original: Product;
}
class MainService {
buildproduct = memoize((products: Array<Product | MainProduct>, ismain) => {
const group = _.groupBy(products, (bsp: Product) =>
!ismain
? bsp?.Original?.active ?? undefined
: bsp?.Original?.Original?.active ?? undefined
);
});
}
interface-FirstOriginal{
活动:布尔值;
状态:布尔型;
}
接口产品{
id:编号;
名称:字符串;
原件:第一份原件;
}
接口主产品{
id:编号;
名称:字符串;
原件:产品;
}
类主服务{
buildproduct=memoize((产品:Array,ismain)=>{
const group=uu.groupBy(产品,(bsp:Product)=>
!伊斯曼
?bsp?原始?激活?未定义
:bsp?.Original?.Original?.active?未定义
);
});
}
现在,我无法执行bsp?.Original?.active??未定义:bsp?原始?原始?活动??未定义
。因为我只能为一个界面做这件事,所以,有人能帮我做这件事吗。像
如何为同一类函数使用这两个接口
谢谢 要指定可选属性或参数,可以在属性/参数名称前面使用
?
例如:
memoize((products?: Array<Product | MainProduct>, ismain?:number) {
}
另一种方法是使用[Partial][1]
。Partial将返回给定接口的所有子集
memoize((products?: Array<Partial<Product | MainProduct>>, ismain?:number) {
}
memoize((产品?:数组,ismain?:编号){
}
在这里!javascript上不存在接口。即使您可以在执行时解决所有编译错误,javascript也无法分辨哪个是哪个。如果我们想知道它是什么类型的blahblah,我们需要添加javascript。这就是我创建Imp
类的原因
从“lodash”导入{groupBy,memoize};
从“/tril”导入{MainOrNot};
接口原件{
活动:布尔值;
状态:布尔型;
}
接口主产品{
id:编号;
名称:字符串;
原件:产品;
}
接口产品{
id:编号;
名称:字符串;
原件:第一份原件;
}
类FirstOriginalImp实现FirstOriginal{
活动:布尔值;
状态:布尔型;
公共构造函数(数据:原始){
分配(此,数据);
}
}
类ProductImp实现产品{
id:编号;
名称:字符串;
原件:第一份原件;
公共构造函数(数据:产品){
分配(此,数据);
}
}
类MainProductImp实现MainProduct{
id:编号;
名称:字符串;
原件:产品;
公共构造函数(数据:MainProduct){
分配(此,数据);
}
}
导出类型MainOrNot=MainProductImp | ProductImp;
类主服务{
buildproduct=memoize((产品:数组,ismain:boolean)=>{
const group=groupBy(产品,(bsp)=>{
if(MainProductImp的bsp实例){
返回bsp?原始?原始?活动?未定义;
}
if(ProductImp的bsp实例){
返回bsp?原始?活动?未定义;
}
});
});
}
您想在接口中还是在实现中使用或设置条件?在实现中,在产品中:数组此位置。您可以使用?
指定可选属性或参数。是的,但当我尝试执行产品时?.Original?.Original我无法执行此操作,因为它仍然将产品作为接口,而不是主产品。因此,我希望您能理解我的观点,即如何使用at const group=u.groupBy(products)(bsp:Product)=>这一行,因为它有Product或MainProduct。@GaneshKaspate您不需要在这里为bsp
指定类型。它应该通过泛型通过u.groupBy。如果没有,那么您可以使用union运算符将这两个接口都作为bsp:Product | MainProduct
使用,但是如果我使用union,它会给出在两个接口,而不是在两个位置。这里的问题是,在使用数组之后,它实际上需要这两个接口的并集,而不是全部。我正在尝试从这些接口获取整个键值。因此,当我获取值时,我只能获取Id,因为Id在两个接口中都很常见。希望你得到我的问题你能检查一下吗
memoize((products?: Array<Partial<Product | MainProduct>>, ismain?:number) {
}