You need to enable JavaScript to run this app. 将语言数组用作Mongoose Schema键报计算属性名类型错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

将语言数组用作Mongoose Schema键报计算属性名类型错误如何解决

报错原因及解决方案

错误根源

  • 计算属性位置直接传入了languageSelector函数对象,而非函数执行后的返回值,函数对象不属于string/number/symbol类型,直接触发类型报错
  • 原有languageSelector逻辑存在缺陷:循环第一次迭代就返回第一个数组元素,只能拿到单个语言值,无法生成所有语言对应的Schema键
  • 语言数组中存储的字符串存在多余前后空格,会生成不符合规范的字段名

修正代码

常量文件修正

// constant.ts
const languages = [
  "Albanian",
  "Amharic",
  "  Arabic ",
  "  Armenia",
  "  Azerbaij",
  "  Basque ",
  "  Belarusi",
  "  Bengali    ",
  "  Bosnian    ",
  "  Bulgaria",
  "  Catalan    ",
  "  Cebuano",
  "  Chinese",
]

// 生成所有语言对应Schema字段的工具方法
export function generateLanguageFields() {
  const languageFields = {}
  languages.forEach(lang => {
    // 清理字符串前后多余空格
    const cleanLangName = lang.trim()
    languageFields[cleanLangName] = [
      {
        startTime: {
          type: String,
        },
        endTime: {
          type: String,
        },
        text: {
          type: String,
        },
      },
    ]
  })
  return languageFields
}

Schema文件修正

import * as mongoose from "mongoose";
import { visibilityPlugin } from "./plugins/visibility";
import { generateLanguageFields } from "./constant";

const ObjectId = mongoose.Schema.Types.ObjectId;

export const TranscriptSchema = mongoose.Schema({
  // 展开所有生成的语言字段到Schema配置中
  ...generateLanguageFields(),
  confidenceLevel: {
    type: Number,
  },
  videoRef: {
    type: ObjectId,
    required: true,
    ref: "videos",
  },
});

方案说明

  • 遍历所有语言批量生成对应字段的配置对象,无需手动逐个定义语言字段
  • 通过对象展开运算符...将批量生成的字段合并到Schema的根配置中,符合Mongoose的定义规则
  • 自动清理语言名称的前后空格,避免生成带多余空格的非法字段名
  • 直接将生成的字符串作为键,符合计算属性名的类型要求,不会再触发类型报错

内容的提问来源于stack exchange,提问作者sambhav jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 22:45:00