当tsconfig中不包含测试/**时,Vscode TS语言功能不可用 [英] Vscode TS language features unavailable when tests/** are not included in the tsconfig

查看:17
本文介绍了当tsconfig中不包含测试/**时,Vscode TS语言功能不可用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望test文件夹与src文件夹相邻时,我的打字脚本测试能够接收linting、代码完成、vscode IntelliSense(ts语言功能)。我不希望在生成TypeScrip项目时转换测试。

我的打字脚本节点项目的结构如下:

.    
├── server
│   │ 
│   │    
│   ├── src
│   │   │
│   │   └── app.ts
│   ├── test
│   │   │
│   │   └── app.test.ts
│   ├── node_modules/
│   ├── package-lock.json
│   ├── package.json
│   ├── tslint.json
│   └── tsconfig.json
├── front_end/
└── README.md

使用我的tsconfig:

{
  "compilerOptions": {
    "baseUrl": ".",
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist",
    "sourceMap": true,
    "strict": true,
    "target": "ESNext",
    "paths": {
      "*": ["node_modules/*"]
    }
  },
  "include": ["src/**/*"]
}

当我在vscode中导航到我的测试文件时,vscode语言特性无法识别安装在node_MODULES中的类型和包。令人惊讶的是,如果我只在服务器文件夹中打开vscode(正如您从我的文件夹结构中看到的那样,服务器不是根目录),语言功能就会工作🧐。

测试使用ts-jest运行,因此这里不需要tsc。为测试🤔扩展tsconfig.json是不是更好的做法?

这是可以在设置中修复的问题,还是应该向https://github.com/microsoft/vscode/issues/new/choose提交错误。

推荐答案

Vscode的单根TSCONFIG文件有问题。与src相邻的test文件夹将使用tsconfig(添加在此pull request中),但如果您打开的文件夹比它高一个目录(例如,如果您有服务器和客户端文件夹),则该文件夹将不起作用。正在跟踪此问题的解决方案:https://github.com/Microsoft/vscode/issues/12463

此外,如果您想要升级到eslint(已弃用tslint),如果您想要将测试文件夹排除在主tsconfig中,则类型脚本解析器还会强制您将tsconfig文件添加到测试文件夹中。Link to eslint multi tsconfig docs

简单的解决方案是使用两个额外的tsconfig。一个用于Lintertsconfig.eslint.json,另一个用于测试test文件夹:test/tsconfig.json包含以下内容:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "noEmit": true
  },
  "include": ["./**/*"]
}

不优雅,但目前没有更好的解决方案。

这篇关于当tsconfig中不包含测试/**时,Vscode TS语言功能不可用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆