You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中window对象的使用与类型问题——以localStorage为例

在TypeScript中使用window对象属性(比如localStorage)的正确姿势

嘿,我刚学TS的时候也被这个问题卡过,正好给你梳理清楚~

1. 直接使用内置的window属性(比如localStorage)

其实在浏览器环境下,TypeScript已经帮我们处理好了大部分原生window属性的类型,你直接用window.localStorage就行,比如:

// 存值
window.localStorage.setItem('username', 'petur');
// 取值
const username = window.localStorage.getItem('username');

完全不用额外折腾,TS会自动给你补全方法提示,还会检查参数类型是否正确。

2. window.localStorage的类型是什么?

它的类型是内置的Storage接口,这个接口定义在TypeScript的DOM类型库(lib.dom.d.ts)里,包含了getItem()、setItem()、removeItem()、clear()这些方法的类型约束——比如getItem()会返回string | null,因为如果对应的key不存在就会返回null,TS会帮你把这个边界情况考虑到。

3. 我需要自己编写接口吗?

大部分原生window属性完全不需要!因为TypeScript默认已经包含了DOM相关的类型定义(只要你的tsconfig.json里配置了"dom"在lib选项里,这个一般是默认开启的)。

但如果你给window添加了自定义属性,比如你想加一个window.appVersion来存当前应用版本,这时候就需要扩展Window接口了,不然TS会报错说找不到这个属性。扩展的方法很简单:

declare global {
  interface Window {
    appVersion: string;
  }
}

// 现在使用就有类型提示了,不会报错
window.appVersion = '1.0.0';
console.log(window.appVersion);

最后补充一句:如果你的项目里突然识别不了window的类型,可以检查下tsconfig.json的compilerOptions.lib,确保包含了"DOM",比如:

{
  "compilerOptions": {
    "lib": ["ESNext", "DOM"]
  }
}

内容的提问来源于stack exchange,提问作者petur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:13:19