如何让继承接口的泛型函数参数的TSDoc文档在VSCode正常显示
问题原因
这是TypeScript语言服务的默认行为:当你向带泛型约束的函数传入对象字面量时,TypeScript会优先将入参推断为你传入的字面量本身的类型,不会主动关联泛型约束Test的元信息,所以属性对应的TSDoc注释不会被读取到。非泛型函数因为参数类型固定为Test,会直接关联对应的类型元信息,所以注释可以正常显示。
可行解决方法
有两种常用的方案可以解决这个问题:
方案1:调用时显式指定泛型参数
调用withGeneric的时候手动指定泛型类型为Test,强制TypeScript复用Test的类型元信息:
withGeneric<Test>({ someField: "" // 悬停即可看到注释 });
这种方案适合你每次调用时都确定入参就是Test类型、不需要额外的字面量类型推断的场景。
方案2:修改泛型函数的参数类型定义
给泛型参数的类型加一层和约束的交叉类型,强制TypeScript把Test的类型元信息合并到入参类型里:
// 仅修改参数类型为 T & Test 即可,其余逻辑不需要改动 function withGeneric<T extends Test>(arg: T & Test) { return arg; }
改完之后不需要调整调用代码,直接悬停调用时的someField就可以正常显示TSDoc注释,同时不会影响泛型原本的类型推断能力,适合需要保留泛型灵活性的场景。
内容的提问来源于stack exchange,提问作者Otto
相关产品推荐
相关产品推荐

