TypeScript 当使用JavaScript时,并非所有的getter/setter引用都会被检测到,

a64a0gku  于 6个月前  发布在  TypeScript
关注(0)|答案(7)|浏览(59)

Bug报告

🔎 搜索词

export class Foo {
	constructor() {
        this.bar = false;
		this.bar = true;
	}
    
	get bar() {
		return true
	}

	set bar(value) {
		// Do something with value
	}
}

/** @type {Foo[]} */
const items = [];

for (const item of items) {
    item.bar = true;
}
  • 版本与回归信息
  • this.bar
  • F2
  • F12 (在练习场上为 cmd F12)
  • item.bar (在第20行)

🙁 实际行为

当点击第3行的 this.bar 时,只有第3行和第4行的示例被高亮显示。按下 F2 时,只有这两个示例被重命名,按下 F12(在练习场上为 cmd F12)时,只有这两个示例出现在引用列表中。

🙂 预期行为

所有引用,包括第20行的 getter、setter 和 item.bar,都应该被引用。在使用TypeScript时,这可以正常工作。请参阅此练习场示例,了解此代码的TypeScript等效项。
Screen.Recording.2022-07-07.at.14.13.24.mp4.mp4

f1tvaqid

f1tvaqid1#

你好,
这似乎不是一个bug。我在最新版本的Typescript(4.7.4)的playground上无法重现它:
Screen.Recording.2022-07-08.at.09.23.29.mov

2cmtqfgy

2cmtqfgy2#

你需要使用 Lang: JavaScript

dfty9e19

dfty9e193#

哦,现在我明白了。那么在使用Typescript语言服务器处理Javascript文件时,这是一个问题吗?

wpcxdonn

wpcxdonn4#

是的,如果你在你的 tsconfig.json / jsconfig.json 中使用 checkJs: true,你几乎可以像使用 TypeScript 一样使用 JavaScript 文件。唯一的区别是你必须使用 JSDoc 语法来分配类型,而不能使用 const x : number = 1。尽管我认为为了在语言服务器中重现这个功能,不需要使用该标志。

of1yzvn4

of1yzvn45#

我已经测试过了,你不需要这个标志。
只要有一个 .js 文件就足以复现错误。

jum4pzuy

jum4pzuy6#

@RyanCavanaugh

我想帮忙解决这个bug。你能把它分配给我吗?

gzjq41n4

gzjq41n47#

很高兴听到!我无法分配这个(您需要在仓库上具有我们不向非微软员工发放的权限级别)。请参阅https://github.com/microsoft/TypeScript/blob/main/CONTRIBUTING.md#issue-claiming

相关问题