我有这两种类型:
export type Equipment = {
id: string;
name: string;
path: WorkCenter[];
key?: string;
pathToElement?: string[];
machine_id?: StatesData.MachineMapping['machine_id'];
machine_codes?: StatesData.MachineMapping['machine_codes'];
timeout_s?: StatesData.MachineMapping['timeout_s'];
stateMachines?: StatesData.MachineState['machines'];
};
export type WorkCenter = {
id: string;
name: string;
children?: Equipment[];
key?: string;
pathToElement?: string[];
stateMachines?: StatesData.MachineState['machines'];
};
在我的代码中的某一点,我得到了一个变量,它的类型可以是Equipment
,也可以是WorkCenter
。
我如何确定它是哪个?根据是Equipment
还是WorkCenter
,我需要不同的逻辑发生。
到目前为止,我接受这个:
args: Equipment | WorkCenter
但是我想不出一个简单的方法来测试这是哪个类型
做typeof
将是最有意义的,但它不工作的ts类型,所以不会工作。我也不能只测试一个只存在于Equipment
上的属性,因为ts
会认为它不是一个联合。我错过了什么?
我也不能只测试一个只存在于设备上的属性,因为ts会认为它不是一个联合。
使用方括号符号可以让您在没有TS抱怨的情况下进行测试
type TypeOne = {
path: string;
};
type TypeTwo = {
child: string;
};
const testIt = (t: TypeOne | TypeTwo) => {
console.log(t['child']);
}