TypeScript类型声明顺序无关原因及禁用对应ESLint规则的安全性
TypeScript类型声明顺序无关的原因及ESLint规则禁用安全性说明
一、为什么TypeScript类型声明顺序不影响结果?
- TypeScript在编译阶段会对所有
type、interface这类类型声明做预扫描,把它们提升到当前作用域的顶部,也就是所谓的「类型提升」。不管你把类型写在代码的哪个位置,TypeScript都能提前识别到,所以前面的代码可以正常引用后面声明的类型。 - 这是TypeScript类型系统特意设计的特性,就是为了让开发者能按逻辑顺序写代码,不用纠结类型声明的先后,提升编写灵活性。
- 要注意:这个特性只针对类型声明,普通变量、函数等JavaScript值的声明还是遵循JS的提升规则,不能在声明前使用。
二、针对.ts文件禁用ESLint的no-use-before-define规则是否安全?
结论:安全,且合理
- ESLint的
no-use-before-define规则本来是为了避免JS里变量/函数未声明就使用的问题,但TypeScript的类型系统已经通过预扫描解决了类型前置引用的问题,不会产生运行时错误。 - 只在.ts文件里禁用该规则,不会影响.js文件的检查,还能避免lint工具针对类型引用报不必要的错误,提升开发效率。
注意事项
- 如果你在.ts文件里写了大量普通JS风格的变量、函数声明(不是类型),这些值不享受TypeScript的类型提升,使用时还是要注意顺序。不过这类问题TypeScript自身的编译检查(比如开启
noUseBeforeDefine编译器选项)也能提前发现。 - 你给出的配置示例是正确的,写法如下:
/* eslintrc.js */ overrides: [ { files: ['**/*.ts'], rules: { 'no-use-before-define': 'off', }, }, ]
内容的提问来源于stack exchange,提问作者jiiin Cho
相关产品推荐
相关产品推荐

