launchcodedev / app-config

Easy Configuration Loader with Strict Validation
https://app-config.dev
Mozilla Public License 2.0
69 stars 11 forks source link

Generated types for `patternProperties` are `any` #230

Open stevejpurves opened 1 week ago

stevejpurves commented 1 week ago

Hi There!

I have a working schema, where I have an object with patternProperties, defined as:

# $schema: https://json-schema.org/draft/2020-12/json-schema-core.html
title: My Schema
type: object
additionalProperties: false
required:
  - api
properties:
  api:
    type: object
    required:
      - myCDNSigningInfo
    properties:
      myCDNSigningInfo:
        type: object
        patternProperties:
          '^[a-zA-Z0-9_.-]+$': { $ref: '#/$defs/myCDNSigningInfo' }
        secret: true
$defs:
  CDNSigningInfo:
    type: object
    additionalProperties: false
    properties:
      hostname:
        type: string
      keyName:
        type: string
      key:
        type: string

But the types generated using npx @app-config/cli generate command are very loose:

export interface Config {
  api: API;
}

export interface API {
  myCDNSigningInfo: { [key: string]: any };
}

Is there a way to improve this type generation or alternatively a different way to define my schema to get better typing?

Thanks!