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

如何让JSDoc/TypeScript泛型参数隐式解析为字面量类型?

解决泛型参数隐式解析为字面量类型的问题

首先修正你的JSDoc写法,函数参数需用@param而非@property,之后可通过以下两种方式实现字面量类型的隐式推断:

方法一:使用const泛型参数(TypeScript 5.0+ 支持)

通过@template {const} T约束泛型参数,让TypeScript自动将传入的对象字面量推断为字面量类型(会带有readonly修饰):

/**
 * @template {const} T
 * @param {T} o
 * @returns {T}
 */
function myFunction(o) {
    // ...doStuff
    return o;
}

// 调用示例
const res = myFunction({x:1,y:2,z:3});
// res的类型会被推断为:{ readonly x: 1; readonly y: 2; readonly z: 3; }

方法二:兼容低版本TypeScript的写法

如果你的TypeScript版本低于5.0,可在调用时通过as const断言强制字面量类型推断:

/**
 * @template T
 * @param {T} o
 * @returns {T}
 */
function myFunction(o) {
    // ...doStuff
    return o;
}

// 调用示例
const res = myFunction({x:1,y:2,z:3} as const);
// res的类型会被推断为:{ readonly x: 1; readonly y: 2; readonly z: 3; }

若不需要readonly修饰符,可手动移除:

type Mutable<T> = { -readonly [K in keyof T]: T[K] };

/**
 * @template {const} T
 * @param {T} o
 * @returns {Mutable<T>}
 */
function myFunction(o) {
    // ...doStuff
    return {...o} as Mutable<T>;
}

const res = myFunction({x:1,y:2,z:3});
// res的类型会被推断为:{ x: 1; y: 2; z: 3; }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:35:47