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

在启用checkJs的.js文件中,如何让TypeScript将值收窄为常量类型?

在JS文件中为Terser配置收窄ECMA版本的类型

在启用checkJs: true的TS配置下,要让TypeScript把ecma: 2017识别为Terser定义的字面量类型而非宽泛的number,可以通过以下几种JSDoc方式实现:

方法1:直接指定字面量类型

通过JSDoc的@type断言,明确把配置对象的ecma字段限定为2017字面量:

/** @type {{ ecma: 2017 }} */
module.exports = {
  ecma: 2017
};

方法2:复用Terser的官方类型

如果想严格对齐Terser库定义的联合类型(5 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020),可以直接引用库的类型定义,既保证类型合规,又能让TS识别2017是联合类型中的有效成员:

/** @type {import('terser').MinifyOptions['ecma']} */
module.exports = {
  ecma: 2017
};

方法3:为单个字段单独断言类型

如果只需要给ecma字段单独指定类型,也可以在字段上添加JSDoc:

module.exports = {
  /** @type {2017} */
  ecma: 2017
};

JS文件里没有TS的as const语法糖,但通过JSDoc的类型断言,同样可以让TypeScript将数字字面量收窄到具体的常量类型,避免被推断为宽泛的number。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:15:33