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是的,这也应该正常工作,示例中缺少许多类型(猜测角度),我没有运行代码,所以我选择了更安全的选项:)