如果在一个数组中收集从同一个类继承的各种不同对象,以便TypeScript不显示错误,我怎样才能在TypeScript中设置一个优等的类?
我试着这样:
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
}
]
这样做,我收到了错误。
如果我不想显示任何错误,我只能添加高级界面IVehicle
的对象。
答案 0 :(得分:8)
修复语法错误后,您可以指定数组中每个条目的类型。
tooltipGroup = new Table(skin);
tooltipGroup.setWidth(w/6);
Label.LabelStyle headerStyle = new Label.LabelStyle(headerFont, Color.GREEN);
Label headerLabel = new Label(effect.getName(), headerStyle);
headerLabel.setWidth(w/6);
headerLabel.setX(20);
headerLabel.setWrap(true);
headerLabel.setAlignment(Align.topLeft);
tooltipGroup.add(headerLabel).width(w/6).row();
Label.LabelStyle style = new Label.LabelStyle(font, Color.WHITE);
Label descriptionLabel = new Label(effect.getDescription(), style);
descriptionLabel.setWidth(w/6);
descriptionLabel.setWrap(true);
descriptionLabel.setAlignment(Align.topLeft);
descriptionLabel.setPosition(20, -descriptionLabel.getHeight());
tooltipGroup.add(descriptionLabel).width(w/6).fill(true);
tooltipGroup.setPosition(mouseX, h - mouseY);
Drawable background = skin.getDrawable("tooltip_background");
tooltipGroup.setBackground(background);
stage.addActor(tooltipGroup);
或者只是将阵列类型更改为车辆,汽车或自行车阵列,如下所示:
interface IVehicle {
modelName: string
}
interface ICar extends IVehicle {
numberOfDoors: number,
isDropTop: boolean
}
interface IBike extends IVehicle {
hasDynamo: boolean
}
let vehicles: IVehicle[] =
[
{
modelName: "carModelName",
numberOfDoors: 4,
isDropTop: true,
} as ICar,
{
modelName: "bikeModelName",
hasDynamo: true
} as IBike
]
如果稍后您要确定 IVehicle 是 IBike 还是 ICar ,您可以使用用户定义的类型保护来执行此操作。
let vehicles: Array<IVehicle | ICar | IBike> =
[
{
modelName: "carModelName",
numberOfDoors: 4,
isDropTop: true,
},
{
modelName: "bikeModelName",
hasDynamo: true
}
]
您可以在本手册的Advanced types部分详细了解它们。
您还可以在游乐场here找到整个代码的工作示例。