Skip to content

Commit 22dabb8

Browse files
Add non-erroring version of bclas'subClassThisTypeAssignable01.ts'
1 parent 2326c28 commit 22dabb8

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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();

0 commit comments

Comments
 (0)