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