|
| 1 | +=== tests/cases/compiler/abstractClassUnionInstantiation.ts === |
| 2 | +class ConcreteA {} |
| 3 | +>ConcreteA : Symbol(ConcreteA, Decl(abstractClassUnionInstantiation.ts, 0, 0)) |
| 4 | + |
| 5 | +class ConcreteB {} |
| 6 | +>ConcreteB : Symbol(ConcreteB, Decl(abstractClassUnionInstantiation.ts, 0, 18)) |
| 7 | + |
| 8 | +abstract class AbstractA { a: string; } |
| 9 | +>AbstractA : Symbol(AbstractA, Decl(abstractClassUnionInstantiation.ts, 1, 18)) |
| 10 | +>a : Symbol(AbstractA.a, Decl(abstractClassUnionInstantiation.ts, 2, 26)) |
| 11 | + |
| 12 | +abstract class AbstractB { b: string; } |
| 13 | +>AbstractB : Symbol(AbstractB, Decl(abstractClassUnionInstantiation.ts, 2, 39)) |
| 14 | +>b : Symbol(AbstractB.b, Decl(abstractClassUnionInstantiation.ts, 3, 26)) |
| 15 | + |
| 16 | +type Abstracts = typeof AbstractA | typeof AbstractB; |
| 17 | +>Abstracts : Symbol(Abstracts, Decl(abstractClassUnionInstantiation.ts, 3, 39)) |
| 18 | +>AbstractA : Symbol(AbstractA, Decl(abstractClassUnionInstantiation.ts, 1, 18)) |
| 19 | +>AbstractB : Symbol(AbstractB, Decl(abstractClassUnionInstantiation.ts, 2, 39)) |
| 20 | + |
| 21 | +type Concretes = typeof ConcreteA | typeof ConcreteB; |
| 22 | +>Concretes : Symbol(Concretes, Decl(abstractClassUnionInstantiation.ts, 5, 53)) |
| 23 | +>ConcreteA : Symbol(ConcreteA, Decl(abstractClassUnionInstantiation.ts, 0, 0)) |
| 24 | +>ConcreteB : Symbol(ConcreteB, Decl(abstractClassUnionInstantiation.ts, 0, 18)) |
| 25 | + |
| 26 | +type ConcretesOrAbstracts = Concretes | Abstracts; |
| 27 | +>ConcretesOrAbstracts : Symbol(ConcretesOrAbstracts, Decl(abstractClassUnionInstantiation.ts, 6, 53)) |
| 28 | +>Concretes : Symbol(Concretes, Decl(abstractClassUnionInstantiation.ts, 5, 53)) |
| 29 | +>Abstracts : Symbol(Abstracts, Decl(abstractClassUnionInstantiation.ts, 3, 39)) |
| 30 | + |
| 31 | +declare const cls1: ConcretesOrAbstracts; |
| 32 | +>cls1 : Symbol(cls1, Decl(abstractClassUnionInstantiation.ts, 9, 13)) |
| 33 | +>ConcretesOrAbstracts : Symbol(ConcretesOrAbstracts, Decl(abstractClassUnionInstantiation.ts, 6, 53)) |
| 34 | + |
| 35 | +declare const cls2: Abstracts; |
| 36 | +>cls2 : Symbol(cls2, Decl(abstractClassUnionInstantiation.ts, 10, 13)) |
| 37 | +>Abstracts : Symbol(Abstracts, Decl(abstractClassUnionInstantiation.ts, 3, 39)) |
| 38 | + |
| 39 | +declare const cls3: Concretes; |
| 40 | +>cls3 : Symbol(cls3, Decl(abstractClassUnionInstantiation.ts, 11, 13)) |
| 41 | +>Concretes : Symbol(Concretes, Decl(abstractClassUnionInstantiation.ts, 5, 53)) |
| 42 | + |
| 43 | +new cls1(); // should error |
| 44 | +>cls1 : Symbol(cls1, Decl(abstractClassUnionInstantiation.ts, 9, 13)) |
| 45 | + |
| 46 | +new cls2(); // should error |
| 47 | +>cls2 : Symbol(cls2, Decl(abstractClassUnionInstantiation.ts, 10, 13)) |
| 48 | + |
| 49 | +new cls3(); // should work |
| 50 | +>cls3 : Symbol(cls3, Decl(abstractClassUnionInstantiation.ts, 11, 13)) |
| 51 | + |
| 52 | +[ConcreteA, AbstractA, AbstractB].map(cls => new cls()); // should error |
| 53 | +>[ConcreteA, AbstractA, AbstractB].map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) |
| 54 | +>ConcreteA : Symbol(ConcreteA, Decl(abstractClassUnionInstantiation.ts, 0, 0)) |
| 55 | +>AbstractA : Symbol(AbstractA, Decl(abstractClassUnionInstantiation.ts, 1, 18)) |
| 56 | +>AbstractB : Symbol(AbstractB, Decl(abstractClassUnionInstantiation.ts, 2, 39)) |
| 57 | +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) |
| 58 | +>cls : Symbol(cls, Decl(abstractClassUnionInstantiation.ts, 17, 38)) |
| 59 | +>cls : Symbol(cls, Decl(abstractClassUnionInstantiation.ts, 17, 38)) |
| 60 | + |
| 61 | +[AbstractA, AbstractB, ConcreteA].map(cls => new cls()); // should error |
| 62 | +>[AbstractA, AbstractB, ConcreteA].map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) |
| 63 | +>AbstractA : Symbol(AbstractA, Decl(abstractClassUnionInstantiation.ts, 1, 18)) |
| 64 | +>AbstractB : Symbol(AbstractB, Decl(abstractClassUnionInstantiation.ts, 2, 39)) |
| 65 | +>ConcreteA : Symbol(ConcreteA, Decl(abstractClassUnionInstantiation.ts, 0, 0)) |
| 66 | +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) |
| 67 | +>cls : Symbol(cls, Decl(abstractClassUnionInstantiation.ts, 18, 38)) |
| 68 | +>cls : Symbol(cls, Decl(abstractClassUnionInstantiation.ts, 18, 38)) |
| 69 | + |
| 70 | +[ConcreteA, ConcreteB].map(cls => new cls()); // should work |
| 71 | +>[ConcreteA, ConcreteB].map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) |
| 72 | +>ConcreteA : Symbol(ConcreteA, Decl(abstractClassUnionInstantiation.ts, 0, 0)) |
| 73 | +>ConcreteB : Symbol(ConcreteB, Decl(abstractClassUnionInstantiation.ts, 0, 18)) |
| 74 | +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) |
| 75 | +>cls : Symbol(cls, Decl(abstractClassUnionInstantiation.ts, 19, 27)) |
| 76 | +>cls : Symbol(cls, Decl(abstractClassUnionInstantiation.ts, 19, 27)) |
| 77 | + |
| 78 | +[AbstractA, AbstractB].map(cls => new cls()); // should error |
| 79 | +>[AbstractA, AbstractB].map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) |
| 80 | +>AbstractA : Symbol(AbstractA, Decl(abstractClassUnionInstantiation.ts, 1, 18)) |
| 81 | +>AbstractB : Symbol(AbstractB, Decl(abstractClassUnionInstantiation.ts, 2, 39)) |
| 82 | +>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) |
| 83 | +>cls : Symbol(cls, Decl(abstractClassUnionInstantiation.ts, 20, 27)) |
| 84 | +>cls : Symbol(cls, Decl(abstractClassUnionInstantiation.ts, 20, 27)) |
| 85 | + |
0 commit comments