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

多模块复用TypeScript接口的ESLint兼容导出方式咨询

搞定TypeScript可复用接口的ESLint兼容问题

别头疼啦,我来帮你理清这个接口导出和ESLint规则冲突的问题,分两步解决:

1. 首选方案:用命名导出(更符合TS社区习惯)

其实在TypeScript里,复用类型的时候,命名导出是更常用也更稳妥的写法,既能避免语法歧义,还能完美适配ESLint规则。直接这么写就行:

// typings/sys.ts
export interface Sys {
  contentType: {
    sys: { id: string };
  };
  id: string;
}

之后在其他模块里导入的话,就用:

import { Sys } from '../typings/sys';

这种写法基本不会触发ESLint的语法错误,只要你的ESLint配置正确识别了TypeScript语法就行。

2. 要是你偏好默认导出:修正写法+解决规则冲突

如果你习惯用默认导出,别直接把interface跟在export default后面(虽然TS能编译,但ESLint会揪着分号的问题不放),改成先定义接口再导出的写法:

// typings/sys.ts
interface Sys {
  contentType: {
    sys: { id: string };
  };
  id: string;
}

export default Sys;

接下来解决你遇到的两个ESLint错误:

针对"'Sys' is not defined"错误

这个问题是因为ESLint原生的no-undef规则不认识TypeScript的类型定义,你需要用TypeScript专属的规则来替代它。打开你的ESLint配置文件(比如.eslintrc.js),修改规则:

module.exports = {
  // ...其他配置项
  rules: {
    "no-undef": "off", // 关掉原生规则
    "@typescript-eslint/no-undef": "error" // 启用TS版的未定义检查
  }
};

针对分号冲突的问题

一会儿说缺分号一会儿说多了分号,这说明你的ESLint同时启用了互相矛盾的分号规则(比如原生semi和@typescript-eslint/semi冲突)。统一用TS专属的分号规则就行:

module.exports = {
  // ...其他配置项
  rules: {
    "semi": "off", // 关掉原生的分号规则
    "@typescript-eslint/semi": ["error", "always"] // 这里选"always"(强制加)或"never"(强制不加),看你的编码习惯
  }
};

要是你用了Prettier配合ESLint,记得安装eslint-config-prettier和eslint-plugin-prettier,然后在ESLint配置的extends里加上"plugin:prettier/recommended",让ESLint跟着Prettier的格式化规则走,就不会再出现这种分号矛盾的问题啦。

最后总结一下

优先选命名导出的方式写可复用接口,省心又规范。要是遇到ESLint规则冲突,核心就是:用@typescript-eslint/*系列的规则替代原生ESLint规则,同时统一格式化相关的配置(比如分号、引号这些)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:33:21