当前位置: 首页 > 知识库问答 >
问题:

打字稿中具有两种可能类型的函数参数

时浩波
2023-03-14

我有一个带参数的函数。此参数必须是两种接口之一。所以我这样写:

 add(item: IntDroga | IntSolucion){
  if(item && item.identificacion){
   if(item.estado.habilitada.value == false || item.estado.estado == estadoAprobacion.Aprobado){ 
    // some code
   }
  }
 }

但我收到了以下错误。

    Property 'habilitada' does not exist on type '{ estado: string; habilitada: { value: boolean; viewValue: string; }; excluida: boolean; } | { estado: estadoAprobacion; fecha: Date; usuario: string; }'.
  Property 'habilitada' does not exist on type '{ estado: estadoAprobacion; fecha: Date; usuario: string; }'.ts(2339)

以下是接口:

因特拉加:

export interface IntDroga {
    _id: string;
    identificacion: {
            nombre: string,
            codigo: string,
            marca: string,
            grupoSustancias: string,
            nProducto: string,
            lote: string,
            CAS: string,
            codigoAlternativo: string,
            estandarInterno: boolean
    };
    informacion: {
            pureza: number,
            humedad: number,
            fecha: {
                    fabricacion: Date,
                    recepcion: Date,
                    vencimientoCertificado: Date,
                    vencimientoAsignada: Date,
            },
            presentacion: string,
            solucion?: { concentracion: number, unidad: string},
            cantidad: {
                    recibida: {valor: number, unidad: string},
                    remanente: {valor: number, unidad: string},
                    unidad: string,
            },
            concentracion?: {valor: number, unidad: string},
            DLDC: {
                    libre: {value: boolean, viewValue: string},
                    masaDL: number,
                    masaDC: number,
                    fDLDC: number,
            };
            sectores: string [];
            rubros: string [];
            ubicacion: string;
            observaciones: string;
    };
    estado: {
            estado: string,
            habilitada: {value: boolean, viewValue: string},
            excluida: boolean
    };
}

内溶:

export interface IntSolucion {
_id: string,
identificacion: {
    nombre: string,
    codigo: string,
},
informacion:{
    tipo: string,
    componentes: Componente [] ,
    fecha:{
        preparacion: Date,
        vencimiento: Date,
        descarte: Date
    },
    material:{
        matraz: {
            codigo: string,
            volumen: {value: number, unidad: string}
        }
    },
    temperaturaPreparacion: string,
    almacenamiento: string
    analista: string,
    solvente: {tipo: string, identificacion: string}
},
estado?: {estado:estadoAprobacion, fecha: Date, usuario: string};
};

我不知道有什么问题。假设函数的参数可以有两种不同的结构。我不知道为什么Tslink会标记它。

提前感谢您的帮助。

共有1个答案

程博学
2023-03-14

它似乎IntSolucion没有属性“estado”对象上的“康复”。也许,你可以改成这样:

add(item: IntDroga | IntSolucion){
  if(item && item.identificacion){
    if(((item instaceof IntDroga) && item.estado.habilitada.value == false) || item.estado.estado == estadoAprobacion.Aprobado) { 
     // some code
    }
  }
}

另一种方法是在以下条件下执行某些类型的操作:

if (item instanceof IntDroga) {
  // do the stuff assuming an IntDrog instance
} else {
  // do the stuff assuming an IntSolucion instance
}
 类似资料:
  • 我正在处理打字稿,并将一个函数传递给另一个函数。 如果我有一个传递到typescript中另一个函数的函数,我应该如何编写类型? 我尝试了,但似乎不起作用。

  • 问题是: 创建一个名为Duo的泛型类,它有两个参数a和B。声明一个名为a类型的第一个变量,以及一个名为B类型的第二个变量。创建一个接受这两个参数的构造函数。在构造函数中,将这些参数分别分配给声明的变量。 这是我能想到的解决方案: 然后,当我继续问下一个问题时,我被绊住了。问题是: 使用问题4中的Duo类声明并创建两个对象,如下所示: a) 第一个名为sideShape的对象分别由字符串类型和整数类

  • 我在TypeScript中遇到了module.d.ts中的导出声明: "const扩展"类型是一个对象吗?为什么它会返回空而不是指定的类型?

  • 假设我有以下类型: 我现在想扩展这个类型,即。 这行不通。我该怎么做?

  • 如何设置文本颜色,我将使用setForebackground(color c),但如果我使用它,图像不会被打乱。 有可能使它与JLabel一起工作吗?在修改单元格的线程中设置所需的Jlabel(带有图像或文本),只需设置Valueat(label,row,column);