编辑抱歉,我的问题有点不清楚。我要强制始终要求getList参数。所以我没有默认值。例如,我希望用户始终提供一个获取列表
我正在尝试创建一个具有一些可选参数和一些必需参数的构造器
export class PageConfig {
constructor({
isSliding = false,
}: {
isSliding?: boolean
getList: (pagingInfo: PagingInfo) => Observable<any>
} = { }) { }
}
执行此操作时出现错误
类型“ {}”中缺少getList,但类型...中必需。
我希望能够在像这样的类中使用它:
class UsersPage {
config = new pageConfig({ this.getList })
getList(pagingInfo: PagingInfo) {
// do work...
}
}
注意::我已为该示例简化了类,但我拥有更多的属性,我想利用解构方法,因此无需配置其他类的实例化比声明中的
如何强制销毁过程中必须传递getList?
答案 0 :(得分:5)
您对PageConfig构造函数参数使用了默认值{}
,但是您在类型中将getList
标记为必需。如果我对您的理解正确,则希望设置构造函数参数,并且始终设置getList
,因此将代码更改为:
export class PageConfig {
constructor({
getList,
isSliding = false
}: {
getList: (pagingInfo: PagingInfo) => Observable<any>;
isSliding?: boolean;
}) {
… // use getList and isSliding
}
}
这种语法(使用默认值进行销毁)有时会有点麻烦。当您extract the constructor argument type时,它会变得更加清晰。
答案 1 :(得分:3)
您要删除默认值,并且还要更改参数顺序-必需参数始终位于可选参数之前:
constructor(getList: (pagingInfo: PagingInfo) => Observable<any>, isSliding?: boolean = false) {...}
答案 2 :(得分:2)
如果所有构造函数参数都是可选的/具有默认值,则可以选择一个选项,简单地是在构造函数中使用Partial config并与默认值合并,例如
interface IPageConfigConstructor {
isSliding: boolean;
getList: (pagingInfo) => Observable<any>;
}
const DEFAULT_CONFIG:IPageConfigConstructor = {
isSliding: true,
getList: (pagingInfo) => null
}
class PageConfig {
constructor(config: Partial<IPageConfigConstructor>) {
const mergedConfig:IPageConfigConstructor = {...DEFAULT_CONFIG,...config}
}
}
class UsersPage {
config = new PageConfig({getList:(pagingInfo)=>this.getList(pagingInfo)});
getList(pagingInfo) {
// do work...
return new Observable
}
}