有没有一种方法可以减轻TypeScript中可选参数的顺序?我现在有这门课
export default class Area {
private name: string;
private description: string;
private item?: Item;
private hazard?: Hazard;
constructor(name: string, description: string, item?: Item, hazard?: Hazard) {
this.name = name;
this.description = description;
this.item = item;
this.hazard = hazard;
}
}对于这个区域类,我需要name和string参数,但不需要item或hazard参数。我尝试通过以下方式实例化一个Area对象:
let item = new Item(); // had required parameters, but not important for now
let hazard = new Hazard(); // had required parameters, but not important for now
let area = new Area("test", "test"); // works as expected
let area1 = new Area("test", "test", item); // works as expected
let area2 = new Area("test", "test", hazard); // DOES NOT WORK as expected
let area3 = new Area("test", "test", item, hazard); // works as expected尽管hazard和item是可选的,但如果我想省略item,则需要为第三个参数传入undefined。是否有减轻或放弃这种行为,我们可以传递与任何可选参数匹配的第三个参数?
发布于 2020-04-19 07:08:24
由类型记录完成的类型检查只存在于类型记录中,在编译的Javascript中不存在,因此如果允许的话,Javascript将无法确定您实际上试图传递哪个参数。
相反,传递一个具有item或hazard属性的可选对象:
class Item{}
class Hazard{}
export default class Area {
private name: string;
private description: string;
private item?: Item;
private hazard?: Hazard;
constructor(
name: string,
description: string,
obj: { item?: Item, hazard?: Hazard } = {}
) {
this.name = name;
this.description = description;
if (obj.item) this.item = obj.item;
if (obj.hazard) this.hazard = obj.hazard;
}
}
const item = new Item();
const hazard = new Hazard();
const area = new Area("test", "test");
const area1 = new Area("test", "test", { item });
const area2 = new Area("test", "test", { hazard });
const area3 = new Area("test", "test", { item, hazard });https://stackoverflow.com/questions/61300707
复制相似问题