TypeScript 文件类的自动补全不正确,

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

TS模板由@mjbvz添加

TypeScript版本:4.0.0-dev.20200607
搜索词

  • suggest / suggestions / completions
  • dom
  • javascript
  • VSCode版本:1.45.1
  • OS版本:Windows 10

重现步骤:

  1. 新建JavaScript文件并输入以下代码:
class File {
    Method() {
    }
}
const file = new File;
file
  1. 在最后一行放置一个点( . ),等待出现带有建议的窗口。
  2. 预期窗口中的列表应包含一个 Method 成员,但实际上却包含了一个 Blob 类成员:

似乎VSCode认为它是一个 Filefor web :

当所有扩展都禁用时,是否会出现此问题?:是

slhcrj9b

slhcrj9b1#

dom 是默认 TS 配置中使用的 lib 值之一。在您的情况中,您需要创建一个 jsconfig.json,它明确地不包含 domlib 数组中,但具有与您的 Node.js 版本(或其他运行时)相关的库。
示例

wooyq4lh

wooyq4lh2#

根据JavaScript语言规则,局部类文件应覆盖全局类。与之形成对比的是,商业Microsoft Visual Studio Professional 2015 Update 3足够智能,能够正确显示提示:

kknvjkwl

kknvjkwl3#

@IllusionMH
我不确定这是否与tsconfig有关。
当我们覆盖浏览器的类时,dom无法从tsconfig中移除的情况如何?

c6ubokkw

c6ubokkw4#

看起来我(部分)关于 domlib 的判断是错误的。
TS 在 module scope 中的本地 File 不会有任何问题,但如果没有顶级的 import / export / require / module.exports,它将被视为全局作用域(参见 #18232 )。
如果你不打算在全局作用域中工作,添加 export {}(或其他根据模块格式的导入/导出)应该能解决问题。
对于全局作用域,情况变得更加复杂——TS 有太多的声明,我们不希望它们在全局作用域中被覆盖(相关问题 #29237 )。
同时,我可以猜想它只是从 lib 中排除了 dom,并提供了自己的“修补”副本,这样就可以立即使用。
@olvap80 不确定 VS 2015 默认使用的配置和 TS 版本(如果有的话)。
/assign mjbvz

相关问题