为何变量‘name’被标记为deprecated?改用name1却正常的原因
问题原因解析
核心冲突:全局作用域变量名与浏览器内置废弃属性重名
当你在全局作用域(比如未用ES模块包裹的浏览器脚本)中声明let name时,会触发TypeScript的废弃提示,原因如下:
- 浏览器的
Window对象内置了一个name属性,原本用于设置/获取窗口名称,但该属性现已被标记为废弃(deprecated)。 - 全局作用域声明的变量会被挂载到
Window对象上,TypeScript检测到你声明的name与这个内置废弃属性重名,因此抛出'name' is deprecated.ts(6385)的错误。
改成name1后不会出问题,是因为name1并非Window对象的内置属性,不存在命名冲突,TypeScript不会触发废弃提示。
补充说明
如果代码是在ES模块环境(包含import/export语句)中编写,即使声明let name也不会报错——模块作用域的变量不会挂载到Window对象上,不会与内置属性产生冲突。
报错代码示例
let name = 'mayk'; let names = ['joao','felipe','marcelo']; for(let char of name){ }
内容的提问来源于stack exchange,提问作者André Davedovicz Dettmer
相关产品推荐
相关产品推荐

