TypeScript中如何让no-relative-parent-imports仅限制值不限制父级类型导入?
解决方案
你可以通过以下3种常用方案解决这个问题,所有方案都不会破坏imports/no-relative-parent-imports规则原本要达成的模块运行时依赖单向、可测试性强的核心目标:
- 配置TS路径别名(最推荐)
这是工业界最通用的方案,通过别名映射消除相对父级路径的写法,同时ESLint可通过TS解析器识别别名,不会触发规则校验:- 先在
tsconfig.json中配置根路径别名:{ "compilerOptions": { "baseUrl": "./src", "paths": { "@/*": ["*"] } } } - 再在ESLint配置中添加TS路径解析器,让import规则识别别名:
// .eslintrc.js module.exports = { settings: { 'import/resolver': { typescript: {} } } } - 最后将原本的相对父级导入改为别名导入,同时推荐用
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
相关产品推荐
相关产品推荐

