contentlayerdev / contentlayerdev/contentlayer

Make it easier to share field definitions

Đang mở
#147 1 bình luận 1 reaction 0 người được giao Xem trên GitHub
meta: never-stale topic: typescript
Ngôn ngữ chính
TypeScript
Star
3.5k
Fork
192
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.