Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Make it easier to share field definitions

Ouverte
#147 1 commentaire 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
42/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
typescript

Piste de recherche

Commencez par l’API defineDocumentType et localisez dans Contentlayer les définitions de types ou les exports de FieldDef et ReferencePolymorphicFieldDef. Vérifiez comment sharedFields.title et sharedFields.url sont inférés, puis déterminez si les définitions de champs réutilisables peuvent passer le type-check et quelle approche userland recommandée devrait être documentée.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

meta: never-stale topic: typescript

I'd love to be able to do something like this:

const sharedFields = {
  title: (opts) => {
    return {
      type: "string",
      required: true,
      ...opts
    }
  },
  url: {
    type: "string",
    resolve: (doc) => doc._raw.flattenedPath,
  }
}

export const Tag = defineDocumentType(() => ({
  name: "Tag",
  filePathPattern: `tags/**/*.md`,
  fields: {
    title: sharedFields.title,
    color: {
      type: "string",
      description: "Color of the badge to show for the tag",
    },
  },
  computedFields: {
    url: sharedFields.url,
  },
}));

The types from defineDocumentType are inferred by Contentlayer. But this process doesn't work because the correct types cannot be inferred from sharedFields.

For example, title throws the following:

(property) title: (opts: any) => any

Type '(opts: any) => any' is not assignable to type 'FieldDef'.
  Type '(opts: any) => any' is not assignable to type 'ReferencePolymorphicFieldDef'.
    Type '(opts: any) => any' is missing the following properties from type '{ type: "reference"; default?: string; of: readonly DocumentType<string>[]; typeField?: string; }': type, of

I'm assuming this is just a matter of bringing in the proper types from Contentlayer. I poked around for a bit, but couldn't find the right import path containing FieldDef and ReferencePolymorphicFieldDef.

I think there are two parts to this:

  1. Get it to work by importing types from Contentlayer.
  2. Considering these types to be userland code, let's find a cleaner recommended implementation approach for devs.
Langage dominant
TypeScript
Étoiles
3.5k
Forks
192
Métriques de merge des PR
Aucune PR mergée en 30 j

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de contentlayerdev/contentlayer

Toutes les issues de contentlayerdev/contentlayer

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.