TypeScript中如何检测代码是否运行在浏览器环境?
正确检测浏览器环境的TypeScript实现
原ES5代码在TypeScript中失效的核心原因有两点:
- TypeScript默认启用
"use strict",立即执行函数(IIFE)中的this会被绑定为undefined,无法和window做等值比较 - 未明确
this的类型,触发TypeScript的隐式any类型报错
推荐实现方式
直接检测全局作用域中是否存在window对象,同时通过类型检查规避TypeScript的类型报错:
const isBrowser = typeof window !== 'undefined' && window instanceof Window;
如果不需要极致严谨的环境校验,也可以使用更简洁的版本(适配绝大多数场景):
const isBrowser = typeof window !== 'undefined';
补充说明
- 这种写法不依赖
this的指向,完全不受严格模式影响 - 通过
typeof window的检查,TypeScript会自动推断后续window的类型为Window | undefined,结合instanceof Window可进一步确认环境的正确性 - 该方案能兼容Node.js、Web Worker等非浏览器运行环境,适用性更广
内容的提问来源于stack exchange,提问作者jcubic
相关产品推荐
相关产品推荐

