Bladeren bron

Added PD.For and PD.Normalize

David Sehnal 6 jaren geleden
bovenliggende
commit
600b61bb27
3 gewijzigde bestanden met toevoegingen van 9 en 16 verwijderingen
  1. 2 8
      src/mol-state/action.ts
  2. 2 8
      src/mol-state/transformer.ts
  3. 5 0
      src/mol-util/param-definition.ts

+ 2 - 8
src/mol-state/action.ts

@@ -78,21 +78,15 @@ namespace StateAction {
     }
 
     export namespace Builder {
-        type ParamDefinition<P> = { [K in keyof P]-?: PD.Base<P[K]> }
-
         export interface Type<A extends StateObject.Ctor, P extends { }> {
             from?: A | A[],
-            params?: ParamDefinition<P> | ((a: StateObject.From<A>, globalCtx: any) => ParamDefinition<P>)
+            params?: PD.For<P> | ((a: StateObject.From<A>, globalCtx: any) => PD.For<P>)
         }
 
         export interface Root {
-            <A extends StateObject.Ctor, P extends { }>(info: Type<A, P>): Define<StateObject.From<A>, Params<P>>
+            <A extends StateObject.Ctor, P extends { }>(info: Type<A, P>): Define<StateObject.From<A>, PD.Normalize<P>>
         }
 
-        type Optionals<P> = { [K in keyof P]-?: undefined extends P[K] ? K : never }[keyof P]
-        type NonOptionals<P> = { [K in keyof P]-?: undefined extends P[K] ? never: K }[keyof P]
-        type Params<P> = Pick<P, NonOptionals<P>> & Partial<Pick<P, Optionals<P>>>
-
         export interface Define<A extends StateObject, P> {
             <T>(def: DefinitionBase<A, T, P>): StateAction<A, T, P>
         }

+ 2 - 8
src/mol-state/transformer.ts

@@ -147,23 +147,17 @@ export namespace Transformer {
     }
 
     export namespace Builder {
-        type ParamDefinition<P> = { [K in keyof P]-?: PD.Base<P[K]> }
-
         export interface Type<A extends StateObject.Ctor, B extends StateObject.Ctor, P extends { }> {
             name: string,
             from: A | A[],
             to: B | B[],
-            params?: ParamDefinition<P> | ((a: StateObject.From<A>, globalCtx: any) => ParamDefinition<P>)
+            params?: PD.For<P> | ((a: StateObject.From<A>, globalCtx: any) => PD.For<P>)
         }
 
         export interface Root {
-            <A extends StateObject.Ctor, B extends StateObject.Ctor, P extends { }>(info: Type<A, B, P>): Define<StateObject.From<A>, StateObject.From<B>, Params<P>>
+            <A extends StateObject.Ctor, B extends StateObject.Ctor, P extends { }>(info: Type<A, B, P>): Define<StateObject.From<A>, StateObject.From<B>, PD.Normalize<P>>
         }
 
-        type Optionals<P> = { [K in keyof P]-?: undefined extends P[K] ? K : never }[keyof P]
-        type NonOptionals<P> = { [K in keyof P]-?: undefined extends P[K] ? never: K }[keyof P]
-        type Params<P> = Pick<P, NonOptionals<P>> & Partial<Pick<P, Optionals<P>>>
-
         export interface Define<A extends StateObject, B extends StateObject, P> {
             (def: DefinitionBase<A, B, P>): Transformer<A, B, P>
         }

+ 5 - 0
src/mol-util/param-definition.ts

@@ -181,6 +181,11 @@ export namespace ParamDefinition {
     export type Params = { [k: string]: Any }
     export type Values<T extends Params> = { [k in keyof T]: T[k]['defaultValue'] }
 
+    type Optionals<P> = { [K in keyof P]-?: undefined extends P[K] ? K : never }[keyof P]
+    type NonOptionals<P> = { [K in keyof P]-?: undefined extends P[K] ? never: K }[keyof P]
+    export type Normalize<P> = Pick<P, NonOptionals<P>> & Partial<Pick<P, Optionals<P>>>
+    export type For<P> = { [K in keyof P]-?: Base<P[K]> }
+
     export function getDefaultValues<T extends Params>(params: T) {
         const d: { [k: string]: any } = {}
         for (const k of Object.keys(params)) {