打字稿:无法让泛型与扩展一起使用

时间:2018-06-20 07:32:29

标签: typescript

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

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

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

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

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

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