contentlayerdev / contentlayerdev/contentlayer

Make it easier to share field definitions

Offen
#147 1 Kommentar 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen
meta: never-stale topic: typescript
Vorherrschende Sprache
TypeScript
Sterne
3.5k
Forks
192
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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

```ts
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:

```txt
(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[]; 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.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginnen Sie bei der defineDocumentType API und suchen Sie in Contentlayer nach den Typdefinitionen oder Exporten von FieldDef und ReferencePolymorphicFieldDef. Prüfen Sie, wie sharedFields.title und sharedFields.url inferiert werden, und bestimmen Sie anschließend, ob wiederverwendbare Felddefinitionen den Type-Check bestehen können und welcher empfohlene userland-Ansatz dokumentiert werden sollte.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
developer-experience
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.