File: exportClassExtendingIntersection.types

package info (click to toggle)
node-typescript 3.3.3333-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 324,548 kB
  • sloc: makefile: 6; sh: 3
file content (71 lines) | stat: -rw-r--r-- 2,959 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
=== tests/cases/compiler/BaseClass.ts ===
export type Constructor<T> = new (...args: any[]) => T;
>Constructor : Constructor<T>
>args : any[]

export class MyBaseClass<T> {
>MyBaseClass : MyBaseClass<T>

    baseProperty: string;
>baseProperty : string

    constructor(value: T) {}
>value : T
}
=== tests/cases/compiler/MixinClass.ts ===
import { Constructor, MyBaseClass } from './BaseClass';
>Constructor : any
>MyBaseClass : typeof MyBaseClass

export interface MyMixin {
    mixinProperty: string;
>mixinProperty : string
}

export function MyMixin<T extends Constructor<MyBaseClass<any>>>(base: T): T & Constructor<MyMixin> {
>MyMixin : <T extends Constructor<MyBaseClass<any>>>(base: T) => T & Constructor<MyMixin>
>base : T

    return class extends base {
>class extends base {        mixinProperty: string;    } : { new (...args: any[]): (Anonymous class); prototype: MyMixin<any>.(Anonymous class); } & T
>base : MyBaseClass<any>

        mixinProperty: string;
>mixinProperty : string
    }
}
=== tests/cases/compiler/FinalClass.ts ===
import { MyBaseClass } from './BaseClass';
>MyBaseClass : typeof MyBaseClass

import { MyMixin } from './MixinClass';
>MyMixin : <T extends import("tests/cases/compiler/BaseClass").Constructor<MyBaseClass<any>>>(base: T) => T & import("tests/cases/compiler/BaseClass").Constructor<MyMixin>

export class MyExtendedClass extends MyMixin(MyBaseClass)<string> {
>MyExtendedClass : MyExtendedClass
>MyMixin(MyBaseClass) : MyBaseClass<string> & MyMixin
>MyMixin : <T extends import("tests/cases/compiler/BaseClass").Constructor<MyBaseClass<any>>>(base: T) => T & import("tests/cases/compiler/BaseClass").Constructor<MyMixin>
>MyBaseClass : typeof MyBaseClass

    extendedClassProperty: number;
>extendedClassProperty : number
}
=== tests/cases/compiler/Main.ts ===
import { MyExtendedClass } from './FinalClass';
>MyExtendedClass : typeof MyExtendedClass

import { MyMixin } from './MixinClass';
>MyMixin : <T extends import("tests/cases/compiler/BaseClass").Constructor<import("tests/cases/compiler/BaseClass").MyBaseClass<any>>>(base: T) => T & import("tests/cases/compiler/BaseClass").Constructor<MyMixin>

const myExtendedClass = new MyExtendedClass('string');
>myExtendedClass : MyExtendedClass
>new MyExtendedClass('string') : MyExtendedClass
>MyExtendedClass : typeof MyExtendedClass
>'string' : "string"

const AnotherMixedClass = MyMixin(MyExtendedClass);
>AnotherMixedClass : typeof MyExtendedClass & import("tests/cases/compiler/BaseClass").Constructor<MyMixin>
>MyMixin(MyExtendedClass) : typeof MyExtendedClass & import("tests/cases/compiler/BaseClass").Constructor<MyMixin>
>MyMixin : <T extends import("tests/cases/compiler/BaseClass").Constructor<import("tests/cases/compiler/BaseClass").MyBaseClass<any>>>(base: T) => T & import("tests/cases/compiler/BaseClass").Constructor<MyMixin>
>MyExtendedClass : typeof MyExtendedClass