File tree Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change
1
+ // @allowJs : true
2
+ // @checkJs : true
3
+ // @strict : true
4
+ // @outDir : ./out
5
+
6
+ // @filename : tile1.ts
7
+ interface Lifecycle < Attrs , State extends Lifecycle < Attrs , State > > {
8
+ oninit ?( vnode : Vnode < Attrs , State > ) : number ;
9
+ [ _ : number ] : any ;
10
+ }
11
+
12
+ interface Vnode < Attrs , State extends Lifecycle < Attrs , State > > {
13
+ tag : Component < Attrs , State > ;
14
+ }
15
+
16
+ interface Component < Attrs , State extends Lifecycle < Attrs , State > > {
17
+ view ( this : State , vnode : Vnode < Attrs , State > ) : number ;
18
+ }
19
+
20
+ interface ClassComponent < A > extends Lifecycle < A , ClassComponent < A > > {
21
+ oninit ?( vnode : Vnode < A , this> ) : number ;
22
+ view ( vnode : Vnode < A , this> ) : number ;
23
+ }
24
+
25
+ interface MyAttrs { id : number }
26
+ class C implements ClassComponent < MyAttrs > {
27
+ view ( v : Vnode < MyAttrs , C > ) { return 0 ; }
28
+
29
+ // Must declare a compatible-ish index signature or else
30
+ // we won't correctly implement ClassComponent.
31
+ [ _ : number ] : unknown ;
32
+ }
33
+
34
+ const test8 : ClassComponent < any > = new C ( ) ;
35
+ // @filename : file1.js
36
+ /** @type {ClassComponent<any> } */
37
+ const test9 = new C ( ) ;
You can’t perform that action at this time.
0 commit comments