为什么对象{ a: number; }
无法分配给类型'T1'?
以下代码:
type T = { a: number };
class A<T1 extends T> {
constructor(public x: T1 = { a: 1 }){}
};
Type '{ a: number; }' is not assignable to type 'T1'.
'{ a: number; }' is assignable to the constraint of type 'T1',
but 'T1' could be instantiated with a different subtype of constraint 'T'.
答案 0 :(得分:2)
原因很简单。这里的T1
是T
的扩展,因此任何T1
也是T
,但反之则不然。取决于T1
是什么,{a:1}
可能无法分配给T1
。考虑以下示例:
type TT = T & {b:string};
new A<TT>();
那么在构造函数中会发生什么?由于您没有传递参数x
,因此它将为{a:1}
使用默认值x
,但是显然{a:1}
不是TT
。>