TypeScript 中 Cannot redeclare block-scoped variable 错误

当我们在同一个块中重新声明一个变量或当 TypeScript 使用全局类型时,会出现错误“Cannot redeclare block-scoped variable”,这会干扰局部变量名称。 为了解决这个错误,在一个块中只声明一次变量并使用 ES 模块。

下面是产生上述错误的示例代码

// ⛔️ Error: Cannot redeclare block-scoped variable 'name'.ts(2451)
// lib.dom.d.ts(17330, 15): 'name' was also declared here.
const name = 'James Doe';

我们可以通过将文件转换为 ES 模块来解决错误。

const name = 'James Doe';

console.log(name); // 👉️ "James Doe"

export {};

export {} 行将文件标记为外部模块。 模块是包含至少 1 个导入或导出语句的文件。

我们也可以通过重命名变量来解决错误。

const employeeName = 'James Doe';

console.log(employeeName); // 👉️ "James Doe"

局部变量名称与全局类型不冲突,因此错误已解决。

如果我们在同一范围内重新声明一个变量,也会发生该错误。

const country = 'Germany';

// ⛔️ Cannot redeclare block-scoped variable 'country'.ts(2451)
const country = 'Germany';

如果需要更改变量的值,请使用 let 关键字声明变量并更改其值而无需重新声明。

let country = 'Germany';

country = 'Austria';

console.log(country); // 👉️ "Austria"
const country = 'Germany';

if (Math.random() > 0.5) {
  const country = 'Austria';
  console.log(country); // 👉️ "Austria"
}

console.log(country); // 👉️ "Germany"

大括号允许我们创建一个块。 这是相同的示例,但没有 if 语句。

const country = 'Germany';

{
  const country = 'Austria';
  console.log(country); // 👉️ "Austria"
}

console.log(country); // 👉️ "Germany"

如果所有建议都无法解决您的错误,请尝试使用立即调用的函数表达式。

const country = 'Germany';

(function () {
  const country = 'Austria';
  console.log(country);
})();

console.log(country); // 👉️ "Germany"

该函数在脚本运行时立即被调用。