typescript - 我可以强制匿名默认导出吗?

如果您有一个与默认导出名称相同的文件,为什么需要命名此导出?我不在DRY那里。

我们有一个https://github.com/import-js/eslint-plugin-import/blob/HEAD/docs/rules/no-anonymous-default-export.md,但是当有人不使用匿名导出时,我该如何做相反的事情并强制出错?

回答1

如果您有一个与默认导出名称相同的文件,为什么需要命名此导出?

你没有。这就是为什么您要链接到 linter 规则 - 这不是必需的,但被某些人认为是“最佳实践”,因为

确保命名默认导出有助于提高代码库的 grepability,鼓励在其声明站点和导入站点对模块的默认导出重复使用相同的标识符。

基本上,人们认为如果你有

export default () => { console.log('Hello'); }

人们更有可能这样做

import logHello from 'sayHello'; // file one
import greeting from 'sayHello'; // file two
import sayHello from 'sayHello'; // file three

但如果你这样做

const sayHello = () => {
    console.log('Hello');
}
export default sayHello

人们会更一致地做

import sayHello from 'sayHello';

这使代码更易于阅读,因为无论您从何处导入相同的函数,都会调用相同的东西。

当你问

如何强制?

我假设您的意思是如何强制 linter 接受您的匿名默认导出?您要么需要内联禁用规则:

/* eslint import/no-anonymous-default-export: [2, {"allowArrowFunction": true}] */
export default () => {}

或更新您的 eslint 配置以接受它。

回答2

如果你真的想要匿名默认导出,即使你的 linter 阻止它,https://eslint.org/docs/user-guide/configuring/rules#disabling-rules。因此,对于您的场景, // eslint-disable-next-line import/no-anonymous-default-export 应该可以工作。或者,如果您想在任何地方禁用该规则,您可以修改 https://eslint.org/docs/user-guide/configuring/rules#using-configuration-files-1

但是您应该阅读命名默认导出的理由:

确保命名默认导出有助于提高代码库的 grepability,鼓励在其声明站点和导入站点对模块的默认导出重复使用相同的标识符。

特别是对于导出的类,要考虑的另一件事是命名导出的类将设置其 constructor.name,这可能很有用。

const bar = class Foo {};
(new bar()).constructor.name; // 'Foo'

相似文章