Skip to content

Commit 2854bf2

Browse files
Merge pull request #3 from functionalland/feature/types
Fix types and unify component.ts
2 parents 1614a6e + c8da1d3 commit 2854bf2

File tree

9 files changed

+419
-192
lines changed

9 files changed

+419
-192
lines changed

library/component.d.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
export const StateSymbol: unique symbol;
2-
32
export type State = { [k: string]: unknown };
4-
export type CustomElement = HTMLElement & {
3+
export type CustomElement<S extends State = {}> = HTMLElement & {
54
adoptedCallback?(): void;
65
attributeChangedCallback?(
76
name: string,
@@ -11,16 +10,23 @@ export type CustomElement = HTMLElement & {
1110
connectedCallback?(): void;
1211
disconnectedCallback?(): void;
1312
elements?: { [k: string]: HTMLElement };
14-
state: Partial<State>;
13+
state: Partial<S>;
1514
};
1615
export type Constructor<E extends CustomElement = CustomElement> = {
1716
new (): E;
1817
} & { observedAttributes: Array<string> };
18+
export type FactorizeHOF<
19+
S extends State = State,
20+
E extends CustomElement = CustomElement,
21+
> = (
22+
f: (Component: Constructor<E>, render: (e: E, s: S) => void) => void,
23+
) => void;
24+
export type ConstructHOF<E extends CustomElement = CustomElement> = (
25+
f: (e: E) => void,
26+
) => void;
1927
export type HOF<S extends State, E extends CustomElement = CustomElement> = (
20-
factorize: (
21-
f: (Component: Constructor<E>, render: (e: E, s: S) => void) => void,
22-
) => void,
23-
construct: (f: (e: E) => void) => void,
28+
factorize: FactorizeHOF<S, E>,
29+
construct: ConstructHOF<E>,
2430
) => void;
2531
export type AsyncRenderCallback<
2632
S extends State,
@@ -70,7 +76,7 @@ export declare enum Callbacks {
7076
type ValueOf<T> = T[keyof T];
7177

7278
export function factorizeComponent<
73-
S extends State,
79+
S extends State = State,
7480
E extends CustomElement = CustomElement,
7581
>(
7682
render: Render<S, E>,
@@ -105,7 +111,8 @@ export function useShadow<
105111
export function useTemplate<
106112
S extends State,
107113
E extends CustomElement = CustomElement,
114+
X extends Node = Node,
108115
>(
109116
getTemplate: () => HTMLTemplateElement,
110-
map?: { [k: string]: (e: E) => CustomElement },
117+
map?: { [k: string]: (e: E) => X | null },
111118
): HOF<S, E>;

0 commit comments

Comments
 (0)