如何让tsc允许向全局window对象赋值自定义属性
仅关闭window对象属性校验的方案
你可以选择两种粒度的关闭方式,都不会影响tsconfig里其他全局校验规则:
- 单语句临时关闭:给当前操作的window做类型断言即可,仅作用于当前行:
// TS/JS环境都可用 (/** @type {any} */ (window)).Blah = '自定义值' - 全局关闭window所有自定义属性校验:在项目根目录新增任意后缀为
.d.ts的声明文件,写入以下内容:
配置后tsc会跳过所有window自定义属性的存在性校验,其他类型校验逻辑正常生效。interface Window { [key: string]: any }
保留类型校验、仅使用标准JS语法的方案
完全不需要使用TS专属语法,tsc原生支持识别标准JS中的JSDoc注释来推导类型,你可以通过JSDoc声明window的自定义属性:
单文件临时声明
只需要在赋值/使用window自定义属性的位置上方加对应JSDoc注释即可:
// 声明Blah为字符串类型,赋值错误时tsc会正常抛出类型错误 /** @type {{ Blah: string }} */ (window).Blah = '测试内容'
全局生效声明
如果需要全项目识别该自定义属性,在项目入口JS文件的顶部添加如下JSDoc注释即可,不需要额外创建TS声明文件:
/** * @typedef {object} CustomWindow * @property {string} Blah - 你自定义的属性,可修改为需要的类型 * @property {number} OtherCustomProp - 可添加多个自定义属性 */ // 后续使用时加一行断言注释 /** @type {CustomWindow & Window} */ (window).Blah = '全局生效的属性'
内容的提问来源于stack exchange,提问作者Cerin
相关产品推荐
相关产品推荐

