Files
astro-jiao77.cn/TYPESCRIPT_WARNINGS_FIXES.md
2025-09-29 05:57:18 +08:00

3.0 KiB
Raw Blame History

TypeScript 警告修复说明

修复的问题

1. 已修复:Property 'CodeHighlight' may not exist on type 'Window'

问题原因: TypeScript 不知道 window.CodeHighlight 这个自定义属性的存在。

解决方案:

  • 创建了 src/types/global.d.ts 文件来扩展 Window 接口
  • 添加了全局类型声明支持自定义属性

2. ⚠️ 残留警告:document.execCommand('copy') is deprecated

问题原因: document.execCommand 是已废弃的 API。

现状:

  • 已优化为优先使用现代的 navigator.clipboard API
  • 只在不支持 Clipboard API 的环境中降级使用 execCommand
  • 这是向后兼容的必要措施,警告可以忽略

代码实现:

// 优先使用现代 API
if (navigator.clipboard && window.isSecureContext) {
    await navigator.clipboard.writeText(text);
} else {
    // 降级到传统方法(会有警告但功能正常)
    document.execCommand('copy');
}

3. 已修复:'line' is declared but its value is never read

问题原因: forEach 回调中的 line 参数未被使用。

解决方案: 将未使用的参数重命名为 _

// 修复前
lines.forEach((line, index) => {
    // line 未被使用
});

// 修复后  
lines.forEach((_, index) => {
    // 使用 _ 表示未使用的参数
});

4. 已修复:'nav' is declared but its value is never read

问题原因: 获取了 DOM 元素但未使用。

解决方案: 删除了未使用的变量声明

5. 已修复:'navigationItems' is declared but its value is never read

问题原因: Props 中定义了但未在组件中使用。

解决方案: 从 Props 解构中移除未使用的属性

6. 已修复:Math.random().toString(36).substr(2, 9) - substr is deprecated

问题原因: substr 方法已被废弃。

解决方案: 替换为现代的 substring 方法

// 修复前
Math.random().toString(36).substr(2, 9)

// 修复后
Math.random().toString(36).substring(2, 11)

构建结果

现在的构建输出:

  • 0 错误
  • ⚠️ 1 个警告execCommand 废弃警告 - 可安全忽略)
  • 💡 3 个提示(来自其他文件的轻微问题)

关于剩余警告的说明

最后剩余的 document.execCommand 警告是预期的,因为:

  1. 兼容性需求:需要支持旧版浏览器
  2. 安全限制Clipboard API 只在 HTTPS 环境下工作
  3. 降级策略:这是一个合理的 progressive enhancement 实现

如果你希望完全消除这个警告,可以:

  • 使用 // @ts-ignore 注释
  • 或者移除降级支持(但会影响旧浏览器兼容性)

最佳实践

  1. 类型安全:为所有自定义全局变量创建类型声明
  2. 现代 API:优先使用新的 Web API适当降级
  3. 未使用变量:使用 _ 前缀或直接删除
  4. 废弃方法:及时更新到推荐的替代方案

项目现在拥有更好的 TypeScript 类型安全性和更少的警告!