🔎 搜索词
"转到定义", "相同标识符", "值", "类型"
🕗 版本与回归信息
始终如此,据我所知
⏯ Playground链接
https://www.typescriptlang.org/play?#code/C4TwDgpgBMULxQN4F8oFgBQmDGB7AdgM6ywIrpYYBmArvtsAJYFRUAUAhgE4DmAXDACUSKKgD0YqD1yN8PGLigATCFVmMmLFgANg2qAAsIXCIGgCKYwBuEQstXrNRKLipQARrmAGoAWhjhoDnwlKEsOABsaaF1tABooCGt8GANcGh5vMMjovShsIPxPd2gaQggQ2RTGWzBwjmwIAWBCbF8Eri5cLigAFQBlACYAdgAWAE4BAHJgSagTKmNbYEUOUIio+LcaWGri2XlS8qgOW1XQSENjCAA6KAARRhCQNKgAWwggqGmAlxhJgH5MJggA
💻 代码
type t = {}
const t = {}
function f(arg: t) { } // going to definition on `t` here gives definitions of both - type and value `t`, even though value `t` cannot be used in this place: tsc - error TS2749: 't' refers to a value, but is being used as a type here. Did you mean 'typeof t'?
🙁 实际行为
在参数类型 t
上点击 "转到定义" 显示了2个定义 - 值和类型,它们具有相同的名称,尽管值的定义完全无关紧要。
🙂 预期行为
"转到定义" 只显示 type t
的相关信息。
6条答案
按热度按时间55ooxyrt1#
你好,@RyanCavanaugh
感谢快速处理! :-)
如果值
t
不是类型t
的定义,那么它是否算作一个bug?falq053o2#
如果LS没有显示他们认为"应该"计算的引用,人们会抱怨很多。但通常理解的是,一个人类正在阅读这个列表,并可以决定找到的引用是否是他们关心的内容。
wtlkbnrh3#
具体来说:在代码试图手动模拟类结构的情况下(即
t
类型是类示例类型,constt
是类的静态部分),值t
"可能"会被计算。ny6fqffe4#
另一个例子,当去定义时,不应该显示类型,但它确实显示了:
https://www.typescriptlang.org/play?ts=5.5.0-dev.20240409&ssl=12&ssc=1&pln=1&pc=1#code/C4TwDgpgBMULxQN4FgBQUNQGYHscC4oA7AVwFsAjCAJwG40BfKNNAYxyIGdZYEV1MWIoQAUASngA+JA0bNUaLCSKtgASw7ZxSNJhgA6IePqpZC1EA
watbbzwu5#
如果LS没有显示他们认为"应该"被计算的引用,人们会抱怨很多。但通常理解的是,一个人类正在阅读这个列表,并可以决定找到的引用是否是他们关心的。
我明白了,也许有一个设置或者运行一个实验可以帮助解决这个问题?很遗憾,由于一些人的偏好,ts-server不得不提供错误的结果。
s4n0splo6#
这听起来像是一个“治疗比疾病更糟糕”的情况。
具体来说:在代码试图手动模拟类结构的情况下(即类型t是类示例类型,const t是类的静态部分),值t“可能”会被计算在内。
我甚至无法告诉你有多少次我导出了一个具有相同名称的常量和类型,因为它们之间存在这样的关系。工厂函数和示例类型,与
Math
类似的实用程序对象配对的接口等。提取一个名称与无关值相同的类型的频率以及这个问题有多严重。我希望它既罕见又不重要。