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

开启// @ts-check后如何处理JS中初始化为null的对象?

解决JS中// @ts-check模式下初始为null的对象属性赋值类型错误

在启用// @ts-check的JavaScript代码中,初始化为null的属性会被TypeScript类型检查器判定为仅能接受null值,导致后续赋值报错。以下是几种纯JS环境下可行的解决方法:

方案1:直接用JSDoc@type声明联合类型

通过@type注释明确指定对象属性的类型为null和目标类型的联合,让检查器知道属性可以接受两种类型的值:

// @ts-check

/** @type {{ a: number|null, b: string|null }} */
const settings = {
  a: null,
  b: null
}

settings.a = 10 // 不再报错
settings.b = "config" // 正常赋值字符串

方案2:提前typedef定义复用类型

如果这个对象类型需要在多个地方使用,可以先通过@typedef定义类型结构,再用@type关联变量:

// @ts-check

/**
 * @typedef {Object} AppSettings
 * @property {number|null} a - 数值类型配置项
 * @property {string|null} b - 字符串类型配置项
 */

/** @type {AppSettings} */
const settings = {
  a: null,
  b: null
}

settings.a = 30

方案3:使用any关闭单个属性的类型检查(不推荐)

如果你不需要对该属性做类型约束,可以用any类型跳过检查,但这会失去@ts-check的类型校验意义,仅建议应急使用:

// @ts-check

/** @type {{ a: any, b: any }} */
const settings = {
  a: null,
  b: null
}

settings.a = 10
settings.b = true // 任意类型都可赋值

以上方案均基于JSDoc注释实现,完全适用于JavaScript环境,无需切换到TypeScript语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:37:08