Javascript TypeScript中具有不同对象的数组
当在一个数组中收集从同一个类继承的不同对象时,如何在TypeScript中设置上级类,以便TypeScript不会显示错误 我试着这样做:Javascript TypeScript中具有不同对象的数组,javascript,typescript,Javascript,Typescript,当在一个数组中收集从同一个类继承的不同对象时,如何在TypeScript中设置上级类,以便TypeScript不会显示错误 我试着这样做: interface IVehicle{ modelName: string } interface ICar extends IVehicle{ numberOfDoors: number, isDropTop: boolean } interface IBike extends IVehicle{ hasDynamo:
interface IVehicle{
modelName: string
}
interface ICar extends IVehicle{
numberOfDoors: number,
isDropTop: boolean
}
interface IBike extends IVehicle{
hasDynamo: boolean
}
var vehicles: IVehicle[] =
[
{
modelName: "carModelName", // Error
numberOfDoors: 4,
isDropTop: true
},
{
modelName: "bikeModelName",
hasDynamo: true
}
]
这样做,我会出错
如果我不想显示任何错误,我只需要添加高级接口的对象。修复语法错误后,您可以指定数组中每个条目的类型
接口车辆{
modelName:string
}
接口ICar扩展IVehicle{
numberOfDoors:number,
isDropTop:布尔型
}
接口IBike扩展了IVehicle{
hasDynamo:布尔型
}
出租车辆:IVehicle[]=
[
{
型号名称:“carModelName”,
门数:4,
是的,
}作为ICar,
{
型号名称:“bikeModelName”,
哈斯迪纳摩:是的
}作为伊比克
]
或者将数组的类型更改为车辆、汽车或自行车的数组,如下所示:
interface IVehicle{
modelName: string
}
interface ICar extends IVehicle{
numberOfDoors: number,
isDropTop: boolean
}
interface IBike extends IVehicle{
hasDynamo: boolean
}
var vehicles: IVehicle[] =
[
{
modelName: "carModelName", // Error
numberOfDoors: 4,
isDropTop: true
},
{
modelName: "bikeModelName",
hasDynamo: true
}
]
let车辆:阵列=
[
{
型号名称:“carModelName”,
门数:4,
是的,
},
{
型号名称:“bikeModelName”,
哈斯迪纳摩:是的
}
]
如果以后要确定iVihicle是IBike还是ICar,则可以使用用户定义的类型保护来执行此操作
功能为自行车(车辆:IVehicle):车辆为IBike{
返回(车辆)。hasDynamo!==未定义;
}
功能isCar(车辆:IVehicle):车辆为ICar{
返回(车辆)。车门数!==未定义;
}
功能日志(车辆:IVehicle){
if(智能自行车(车辆)){
//tsc知道这辆车是IBike
控制台.log(车辆.hasdynamino);
}否则,如果(isCar(车辆)){
//tsc知道车辆是ICar
控制台.日志(车辆.车门数量);
}否则{
控制台.log(车辆.modelName);
}
}
您可以在手册的章节中阅读更多关于它们的信息
您还可以在操场上找到完整代码的工作示例。谢谢。我也可以向ICar或IBike投币吗?例如,当我从该数组中获取对象时,typescript中没有强制转换,只有类型断言。如果您需要找出条目的特定类型,可以使用typeguards,我将为此添加一个示例。