我试图将输入限制为一个对象,但失败:
showModal<T extends {[key: string]: any}, U>(component: Type<AbstractDialogComponent<T, U>>,
options?: ModalDialogOptions & { context: T }): Observable<U> {
options = { context: {}, viewContainerRef: this.vcRef,
fullscreen: true , ...options || {} };
return Observable.fromPromise(this.modal.showModal(component, options));
}
错误是:第二行上的Type '{}' is not assignable to type T
。
我在这里想念什么?
答案 0 :(得分:1)
T
可以是扩展{[key: string]: any}
的任何类型,因此可以是{ requiredField: number }
。如果T
是此类型,则值{}
不是T
的有效默认值,因为T
有必填字段。因此,编译器不允许分配{}
,因为在有些地方调用无效。
通常的解决方法是使用类型断言:
(...options || ({} as T))