contentlayerdev / contentlayerdev/contentlayer
Make it easier to share field definitions
- 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
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