【发布时间】:2020-10-23 09:18:45
【问题描述】:
我有一个带参数的函数。这个参数需要是两种接口之一。 所以我是这样写的:
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)
接口如下:
IntDroga:
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
};
}
IntSolucion:
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 会标记它。
提前感谢您的帮助。
【问题讨论】:
-
你应该看看 typescript typeguard:typescriptlang.org/docs/handbook/advanced-types.html
-
这是因为
IntSolucion在estado字段中没有habilitada属性。
标签: angular typescript tslint