Skip to content
GitHub

CheckedParams

type alias in meocord/interface Since 4.1.0

type CheckedParams<P extends string, Declared> = string extends keyof Declared
  ? Declared
  : {
      [K in keyof Declared]: K extends PatternSpecs<P>['name']
        ? Extract<PatternSpecs<P>, { name: K }> extends infer S extends {
            value: unknown
            optional: boolean
            typed: boolean
          }
          ? S['typed'] extends true
            ? S['optional'] extends true
              ? S['value'] | undefined extends Declared[K]
                ? Declared[K]
                : S['value'] | undefined
              : S['value'] extends Declared[K]
                ? Declared[K]
                : S['value']
            : S['optional'] extends true
              ? undefined extends Declared[K]
                ? Declared[K]
                : Declared[K] | undefined
              : Declared[K]
          : never
        : { readonly 'not a param of the pattern': K }
    }

The params a message handler declares, Declared, as @MessageHandler checks them against its pattern P.

You do not use it directly: it is why a handler whose params name a param the pattern lacks, or give a typed param a type its value does not fit, fails to compile, with the param named. Params such as Record<string, string>, which take anything, are not checked.

See also