Typescript:can';不能让泛型与extends一起工作

Typescript:can';不能让泛型与extends一起工作,typescript,Typescript,我试图将输入限制为对象,但失败: showModal<T extends {[key: string]: any}, U>(component: Type<AbstractDialogComponent<T, U>>, options?: ModalDialogOptions & { context: T }): Observable<U> { options = { context: {}, viewContainerR

我试图将输入限制为对象,但失败:

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));
}
showmodel(组件:类型、,
选项?:ModalDialogOptions&{context:T}):可观察{
选项={context:{},viewContainerRef:this.vcRef,
全屏:真,…选项|{};
返回Observable.fromPromise(this.modal.showModal(组件,选项));
}
错误是:
类型“{}”不可分配给第二行的类型T


我这里缺少什么?

T
可以是扩展
{[key:string]:any}
的任何类型,因此它可以是
{requiredField:number}
。如果
T
是此类型,则值
{}
不是
T
的有效默认值,因为
T
具有必填字段。因此,编译器不允许赋值
{}
,因为有些调用是无效的

解决此问题的通常方法是使用类型断言:

(...options || ({} as T))

谢谢,这很有效。我将其应用于context属性,并且我能够将
作为任何
部分省略,以使其正常工作:
options={context:({}as T),…
@BartvandenBurg是的,这也应该正常工作,示例中缺少许多类型(猜测角度),我没有运行代码,所以我选择了更安全的选项:)