无法在 TypeScript 中重新声明块作用域变量

无法在 TypeScript 中重新声明块作用域变量

Cannot redeclare block-scoped variable in TypeScript

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

下面是错误如何发生的示例。

索引.ts
// ⛔️ Error: Cannot redeclare block-scoped variable 'name'.ts(2451) // lib.dom.d.ts(17330, 15): 'name' was also declared here. const name = 'James Doe';
name变量在库的类型中的某处声明,因此全局类型定义与局部变量声明冲突。 DOM

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

索引.ts
const name = 'James Doe'; console.log(name); // 👉️ "James Doe" export {};

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

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

索引.ts
const employeeName = 'James Doe'; console.log(employeeName); // 👉️ "James Doe"

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

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

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

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

索引.ts
let country = 'Germany'; country = 'Austria'; console.log(country); // 👉️ "Austria"

但是,请注意,您可以使用相同的名称在不同的块中声明一个变量。

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

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

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

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

索引.ts
const country = 'Germany'; (function () { const country = 'Austria'; console.log(country); })(); console.log(country); // 👉️ "Germany"

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

结论

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