// @allowJs: true // @checkJs: true // @outDir: ./out // @filename: tile1.ts interface Lifecycle { oninit?(vnode: Vnode): number; [_: number]: any; } interface Vnode = Lifecycle> { tag: Component; } interface Component { view(this: State, vnode: Vnode): number; } interface ClassComponent extends Lifecycle> { oninit?(vnode: Vnode): number; view(vnode: Vnode): number; } interface MyAttrs { id: number } class C implements ClassComponent { view(v: Vnode) { return 0; } } const test8: ClassComponent = new C(); // @filename: file1.js /** @type {ClassComponent} */ const test9 = new C();