TypeScript 通用类型接口中丢失了类型元数据,

k5ifujac  于 6个月前  发布在  TypeScript
关注(0)|答案(4)|浏览(84)

TypeScript版本: 3.6.1-rc
搜索词:

泛型函数元数据
泛型类型jsdoc
Map类型jsdoc

代码

interface Example {
    /** This is property A. */
    a: number;
}

function one(param: Example): void {};

one({
    a: 1 // ✅ Hover over `a` to see description
});

function two<T extends Example>(param: T): void {};

two({
    a: 2 // ❌ Description is lost
});

function three<T = Example>(param: T): void {};

three({
    a: 3 // ❌ Description is lost
});

function four<T extends Example = Example>(param: T): void {};

four({
    a: 4 // ❌ Description is lost
});

// Unexpectedly:
four<Example>({
    a: 4 // ✅ Hover over `a` to see description
});

预期行为:

我希望至少在第四个或第五个示例上看到悬停描述,但我没有。

** playground链接:** 见demo
相关问题:

这与#21489类似,但后者涉及Map类型,而前者涉及泛型。

pxyaymoc

pxyaymoc1#

我注意到这个现象只发生在调用函数的时候。在函数内部,元数据仍然存在。

nqwrtyyt

nqwrtyyt2#

在您的示例中,当 Example 被明确地作为类型参数提供时, twothree 也可以工作。问题似乎是对于 T 的推断类型是结构体 { a: number; } 而不是 Example ,而且前者没有后者所具有的 jsdoc。

ahy6op9u

ahy6op9u3#

听起来像对象字面量属性的快速信息,当上下文类型是一个带有对象类型约束的类型参数时,应该为其具有匹配约束的属性提供jsdoc。

iecba09b

iecba09b4#

编辑-起初我认为这仅限于通用Map类型,但它都是泛型。

相关问题