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

TypeScript中如何让no-relative-parent-imports仅限制值不限制父级类型导入?

解决方案

你可以通过以下3种常用方案解决这个问题,所有方案都不会破坏imports/no-relative-parent-imports规则原本要达成的模块运行时依赖单向、可测试性强的核心目标:

  • 配置TS路径别名(最推荐)
    这是工业界最通用的方案,通过别名映射消除相对父级路径的写法,同时ESLint可通过TS解析器识别别名,不会触发规则校验:
    1. 先在tsconfig.json中配置根路径别名:
      {
        "compilerOptions": {
          "baseUrl": "./src",
          "paths": {
            "@/*": ["*"]
          }
        }
      }
      
    2. 再在ESLint配置中添加TS路径解析器,让import规则识别别名:
      // .eslintrc.js
      module.exports = {
        settings: {
          'import/resolver': {
            typescript: {}
          }
        }
      }
      
    3. 最后将原本的相对父级导入改为别名导入,同时推荐用import type明确仅导入类型:
      // three.ts
      import type { Add } from '@/add'
      
      export default function three(add: Add) : number {
        return add([1, 2]);
      }
      
  • 给规则配置类型导入例外
    如果你不想修改路径配置,可以直接给imports/no-relative-parent-imports规则添加例外,仅允许父级路径的类型导入:
    // .eslintrc.js
    module.exports = {
      rules: {
        'imports/no-relative-parent-imports': ['error', {
          // 允许仅导入类型的相对父级引用
          ignoreTypeImports: true
        }]
      }
    }
    
    配置后只有import type形式的父级导入会被放行,运行时代码的父级导入依然会被规则拦截,完全符合你的使用需求。
  • 抽离公共类型到统一目录
    如果团队规则不允许修改路径别名和规则配置,可以把所有公共的接口、类型定义抽离到独立的types目录,放在所有模块都可以通过同级或别名路径访问的位置,避免跨父级导入类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:54:08