You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript/ESLint未检测到无效函数名编译错误原因咨询

这类错误属于TypeScript/ESLint应检测的编译错误范畴

代码中的具体错误

你的代码存在两处明确的语法/API调用错误:

  1. Joi.any()``.forbidden():误用了标签模板语法,Joi.any()返回的是Joi Schema对象,并非可作为标签模板的函数,正确写法应为Joi.any().forbidden()
  2. Joi.number()optional():漏写了成员访问的点运算符,正确写法应为Joi.number().optional()

TypeScript的检测能力

只要满足以下两个前提,TypeScript完全可以在编译阶段检测到这些错误:

  • 已安装@types/joi包(提供Joi的官方类型定义)
  • TypeScript配置中开启了strict模式(或至少启用strictNullChecks、noImplicitAny等核心类型检查规则)

对应的检测逻辑:

  • 针对Joi.number()optional():TypeScript会识别到Joi.NumberSchema类型上不存在名为optional的方法,直接抛出类型错误
  • 针对Joi.any()``.forbidden():TypeScript会检测到标签模板的标签必须是函数类型,而Joi.AnySchema不属于函数类型,因此抛出类型不匹配的错误

ESLint的检测能力

通过配置合适的规则,ESLint也能提前捕捉这类问题:

  • 启用no-unexpected-multiline规则:可识别Joi.any()``.forbidden()这种容易引发误解的语法误用
  • 启用@typescript-eslint/no-unsafe-call、@typescript-eslint/no-unsafe-member-access等规则:能检测到对不存在的方法/属性的调用

未检测到错误的可能原因

大概率是以下情况之一:

  1. 未安装@types/joi,TypeScript无法识别Joi对象的类型结构
  2. TypeScript的strict模式未开启,类型检查强度不足
  3. ESLint未配置上述相关规则,或未集成@typescript-eslint插件

修复方案

  1. 修正代码错误:
export function getHeaderLinkValidationSchema() {
  const { stage } = process.env;

  return Joi.object()
    .keys({
      "header": stage === "prod" ? Joi.any().forbidden() : Joi.number().optional(),
    })
    .required()
    .unknown();
}
  1. 安装Joi类型定义:
npm install --save-dev @types/joi
  1. 在tsconfig.json中开启strict模式:
{
  "compilerOptions": {
    "strict": true
  }
}
  1. 配置ESLint规则(在.eslintrc中添加):
{
  "rules": {
    "no-unexpected-multiline": "error",
    "@typescript-eslint/no-unsafe-call": "error",
    "@typescript-eslint/no-unsafe-member-access": "error"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:25:18