在放弃之前,我想在这里试一试。
我有一个包含以下类型定义的定义文件:
/**
* My json decode function, in reality very different
* implementation (class like) but it works as an example
*/
function decodeJSON<T = unknown>(str: string): T;
如果我想在TypeScript中使用这个泛型,我会做以下操作:
const value = decodeJSON<number[]>("[1,2,3]"); // return type will be number[]
然而,在我的实际代码中,我不能使用TypeScript,只能用它的类型定义来进行开发,并且我似乎找不到一种方法来告诉我的编辑器我传递给泛型参数的类型是什么,以便获得正确的类型信息。
我尝试使用JSDoc来指定泛型参数的参数可能与TypeScript相同的方式
// I was expecting JSDoc to understand something like this, but it doesn't
/** @type {decodeJSON<number[]>} */
const value = decodeJSON("[1,2,3]"); // Type inference will be unknown
但是它并不起作用。我并不在乎运行时的结果可能是什么,因为我已经实施了健全性检查。我只想让我的编辑器给我关于通用函数结果的类型提示,以使我的工作(这个函数在我的应用程序中有很重要的用途)更加容易。
我的编辑器是WebStorm,如果有影响的话,但这似乎是JSDoc的一般限制。
decodeJSON<theGenericType>()
,因此编辑器会告诉我函数结果的类型未知。 - Steven Guerrero@template
,基本上与泛型相同。我不认为这是一个不可能的请求。 - Steven GuerreroType 'X' is not generic.ts(2315)
,而明显期望的是/** @type {decodeJSON<number[]>} */
。 - milahu