【问题标题】:Cannot redeclare block-scoped variable 'name' In TypeScript无法在 TypeScript 中重新声明块范围的变量“名称”
【发布时间】:2018-05-12 00:15:46
【问题描述】:

嗨,我正在学习打字。

我的代码中有。

var name:string="Hello world";
console.log(name);

编译时出现此错误。

error TS2451: Cannot redeclare block-scoped variable 'name'.
index.ts(4,5): error TS2451: Cannot redeclare block-scoped variable 'name'.

谁能描述我为什么会收到这个错误?

【问题讨论】:

  • 您尝试在哪个上下文中执行此代码?
  • 该错误似乎表明您已经在范围内获得了一个名为 name 的变量。

标签: typescript


【解决方案1】:

name 属性在 window 对象上定义:

interface Window extends EventTarget, WindowTimers, WindowSessionStorage, WindowLocalStorage, WindowConsole, GlobalEventHandlers, IDBEnvironment, WindowBase64, GlobalFetch {
    ...
    name: string;
    ...
}

(https://github.com/Microsoft/TypeScript/blob/master/lib/lib.d.ts#L17226)

您需要为变量取一个新名称:

var myname = "Hello world";
console.log(myname);

【讨论】:

    【解决方案2】:

    您可以在文件开头添加export{}

    【讨论】:

    • 你能解释一下为什么要这样做吗?
    • @rahul,export {} 使它成为一个模块,因此它有自己的模块范围,因此可以在没有类的情况下使用name。见medium.com/@muravitskiy.mail/…
    【解决方案3】:

    您的变量name 已在同一代码块中的某处声明。而且是不允许的。

    这正是错误信息的意思。

    原因是,您试图在全局范围内声明此特定变量,而这里 name 已因某种技术原因定义,更多详细信息请参阅:https://github.com/Microsoft/TypeScript/issues/9850

    (感谢@betadeveloper

    【讨论】:

    • 没有。它在浏览器中是全局的 - window.name 并且在打字稿中他们决定将其声明为 const,请参阅此问题 github.com/Microsoft/TypeScript/issues/9850
    • 感谢您的洞察力,我编辑了我的答案,添加了这个特定案例的原因。
    • @Pac0 感谢兄弟 :-)
    猜你喜欢
    • 1970-01-01
    • 2022-10-30
    • 2018-08-29
    • 2018-08-02
    • 2020-06-07
    • 2023-04-08
    • 2016-06-15
    • 1970-01-01
    • 2019-09-11
    相关资源
    最近更新 更多