根据道具确定类型



我有这两种类型:

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']);
}

相关内容

  • 没有找到相关文章

最新更新