无法在 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 个import
orexport
语句的文件。
您也可以通过重命名变量来解决错误。
索引.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 模块。