11import {
22 ComponentMirror ,
33 Injector ,
4+ input ,
45 InputSignal ,
56 reflectComponentType ,
67 Type ,
@@ -9,27 +10,36 @@ import {
910type Inputs < T > = {
1011 [ K in keyof T as T [ K ] extends InputSignal < infer R >
1112 ? K
12- : never ] : T [ K ] extends InputSignal < infer R > ? R : never
13+ : never ] ? : T [ K ] extends InputSignal < infer R > ? R : never
1314}
1415
15- type HasUndefinedProperty < T > = keyof T extends never
16- ? true
17- : keyof {
18- [ K in keyof T as undefined extends T [ K ] ? K : never ] : T [ K ]
19- } extends never
20- ? false
21- : true
16+ type OptionalKeys < T , K = keyof T > = K extends keyof T
17+ ? T [ K ] extends Required < T > [ K ]
18+ ? undefined extends T [ K ]
19+ ? K
20+ : never
21+ : K
22+ : never
2223
23- interface FlexRenderRequiredOptions <
24- TComponent ,
25- TInputs extends Record < string , any > ,
26- > {
24+ interface FlexRenderRequiredOptions < TInputs extends Record < string , any > > {
25+ /**
26+ * Component instance inputs. They will be set via [componentRef.setInput API](https://angular.dev/api/core/ComponentRef#setInput)
27+ */
2728 inputs : TInputs
29+ /**
30+ * Optional {@link Injector} that will be used when rendering the component
31+ */
2832 injector ?: Injector
2933}
3034
31- interface FlexRenderOptions < TComponent , TInputs extends Record < string , any > > {
35+ interface FlexRenderOptions < TInputs extends Record < string , any > > {
36+ /**
37+ * Component instance inputs. They will be set via [componentRef.setInput API](https://angular.dev/api/core/ComponentRef#setInput)
38+ */
3239 inputs ?: TInputs
40+ /**
41+ * Optional {@link Injector} that will be used when rendering the component
42+ */
3343 injector ?: Injector
3444}
3545
@@ -44,9 +54,9 @@ export function flexRenderComponent<
4454 TInputs extends Inputs < TComponent > = Inputs < TComponent > ,
4555> (
4656 component : Type < TComponent > ,
47- ...options : HasUndefinedProperty < TInputs > extends true
48- ? [ FlexRenderOptions < TComponent , TInputs > ?]
49- : [ FlexRenderRequiredOptions < TComponent , TInputs > ]
57+ ...options : OptionalKeys < TInputs > extends never
58+ ? [ FlexRenderOptions < TInputs > ?]
59+ : [ FlexRenderRequiredOptions < TInputs > ]
5060) {
5161 const { inputs, injector } = options ?. [ 0 ] ?? { }
5262 return new FlexRenderComponent ( component , inputs , injector )
0 commit comments