Dav*_*ark 5 parameters undefined typescript
如果我有一个带有n可选参数的构造函数并且我只想为最后一个可选参数传递一个值,我必须传递undefined n-1时间。
例如:
class House() {
constructor(door?, roof?, windows?) { }
}
Run Code Online (Sandbox Code Playgroud)
如果我想实例化一个House没有 adoor或 aroof但有的new windows,我必须undefined两次传递给构造函数:
let myHouse = new House(undefined, undefined, new Windows());
Run Code Online (Sandbox Code Playgroud)
C# 有命名参数,这在这里很理想。
undefined n-1在这种情况下,我如何避免通过时间?
最常用的方法是参数对象。您可以使用一个参数,而不是使用三个参数:
interface HouseOptions {
door?: Door;
roof?: Roof;
windows?: Windows;
}
class House() {
constructor(options: HouseOptions) {...}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以创建一个这样的房子: new House({windows: new Windows()})
这比命名参数更灵活:考虑这样一种情况:您希望允许有窗户和门的房屋或有窗户和屋顶的房屋,但不允许只有屋顶的房屋。对于这种情况,您可以执行以下操作:
interface DoorlessHouseOptions {
roof: Roof;
windows: Windows;
}
interface RooflessHouseOptions {
door: Door;
windows: Windows;
}
class House() {
constructor(options: DoorlessHouseOptions | RooflessHouseOptions) {...}
}
Run Code Online (Sandbox Code Playgroud)
这以类型安全的方式强制您的房子有门或屋顶(以及窗户),这会因命名参数而变得复杂。在某些语言中,这可以通过方法重载来解决,但由于 Javascript 不允许方法重载,因此选项对象通常是要走的路。
另一种不太常用的方法是Builder 模式。
| 归档时间: |
|
| 查看次数: |
1307 次 |
| 最近记录: |