29 lines
593 B
JavaScript
29 lines
593 B
JavaScript
declare class T {}
|
|
declare class U {}
|
|
|
|
declare class A {}
|
|
declare class B extends A {}
|
|
|
|
type O1 = {...{p:T}&{q:U}};
|
|
declare var o1: O1;
|
|
(o1: {p?:T,q?:U}); // ok
|
|
|
|
type O2 = {...{p:A}&{p:B}};
|
|
declare var o2: O2;
|
|
(o2: {p?:B}); // ok
|
|
({p: new B}: O2); // ok
|
|
({p: new A}: O2); // error: A ~> B
|
|
|
|
type O3 = {...{p:A}&{[string]:B}};
|
|
declare var o3: O3;
|
|
(o3: {p:B,[string]:B});// ok: A&B = B
|
|
(o3.q: B); // ok
|
|
|
|
type O4 = {...{[string]:A}&{p:B}};
|
|
declare var o4: O4;
|
|
(o4: {p:B,[string]:A}); // ok: A&B = B
|
|
|
|
type O5 = {...{[string]:A}&{[string]:B}};
|
|
declare var o5: O5;
|
|
(o5: {[string]:B}); // ok: A&B = B
|