[英]Optional Parameters in Class Constructors in TypeScript
有没有办法减轻 TypeScript 中可选参数的顺序? 我目前有 class
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;
}
}
对于此区域 class,我需要name
和string
参数,但不需要item
或hazard
参数。 我尝试通过以下方式实例化区域 object:
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
。 有没有办法减轻或放弃这种行为,我们可以传入与任何可选参数匹配的第三个参数?
Typescript 所做的类型检查仅存在于 Typescript 中 - 它不存在于已编译的 Javascript 中,因此如果允许,Z9E13B69D1D2DA927102 将无法确定实际尝试传递哪个参数。
相反,传递一个可选的object可能具有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 });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.