import/namespace 正确性 ”">
作用
强制命名在被取消引用(导入为完整命名空间时,例如 `import * as foo from './foo'; foo.bar();`)时存在,如果 `./foo.` 未导出 bar,将报错。如果找到可导出的名称,将在导入声明时报错。此外,对计算引用(如 `foo["bar"]()`)也会报错。报告在分配给导入命名空间成员时出错。
为何这很糟糕?
取消引用不存在的名称会导致运行时错误和代码的意外行为。因为它可能 unclear 哪些名称有效,所以不太可靠且难以维护。此规则有助于确保所有引用的名称均已定义,从而提高代码的清晰度和鲁棒性。
示例
已知
javascript
// ./foo.js
export const bar = "I'm bar";
此规则不正确代码示例
javascript
// ./qux.js
import * as foo from "./foo";
foo.notExported(); // Error: notExported is not exported
// Assignment to a member of an imported namespace
foo.bar = "new value"; // Error: bar cannot be reassigned
// Computed reference to a non-existent export
const method = "notExported";
foo[method](); // Error: notExported does not exist
此规则正确代码示例
javascript
// ./baz.js
import * as foo from "./foo";
console.log(foo.bar); // Valid: bar is exported
// Computed reference
const method = "bar";
foo[method](); // Valid: method refers to an exported function