Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Incorrect typing for `enum` on computed fields

未关闭
#241 2 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
55/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
typescript
领域
tooling

调研方向

从 packages/@contentlayer/core/src/generation/generate-types.ts 开始,特别是 issue 中链接的区域,并使用列出的 npm install、npm run generate 和 cat 命令重现问题。验证 .contentlayer/generated/types.d.ts 为计算出的 locale 字段提供了 'en' | 'de' 类型,而不是字面量 enum 类型。

由索引模型根据 Issue 内容生成。

描述

bug meta: never-stale

currently when defining a computed field of type enum like this:

import { defineDocumentType, makeSource } from 'contentlayer/source-files'

const locales = ['en', 'de'] as const

const Post = defineDocumentType(() => {
  return {
    name: 'Post',
    filePathPattern: 'posts/**/*.mdx',
    fields: {
      language: {
        type: 'enum',
        options: locales,
        required: true
      }
    },
    computedFields: {
      locale: {
        type: 'enum',
        options: locales,
        resolve(doc) {
          return doc['language']
        }
      }
    }
  }
})

export default makeSource({
  contentDirPath: 'content',
  documentTypes: [Post]
})

this generates a ts schema:

export type Post = {
  /** File path relative to `contentDirPath` */
  _id: string
  _raw: Local.RawDocumentData
  type: 'Post'
  language: 'en' | 'de'
  /** Markdown file body */
  body: Markdown
  locale: enum
}  

note that the regular enum field is correct, but the computed enum field is of type enum

i guess this is because of https://github.com/contentlayerdev/contentlayer/blob/dcc48858f7643f882a72a9cc5941deb36bbb1ecf/packages/%40contentlayer/core/src/generation/generate-types.ts#L120


steps to reproduce:

  • git clone git@github.com:stefanprobst/issue-contentlayer-computed-field-types.git
  • cd issue-contentlayer-computed-field-types
  • npm i
  • npm run generate
  • cat .contentlayer/generated/types.d.ts
主要语言
TypeScript
星标
3.5k
派生
192
PR 合并指标
30 天内没有已合并 PR

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

contentlayerdev/contentlayer 的其他 Issue

查看 contentlayerdev/contentlayer 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。