WSL2 VSCode 不使用本地 tsconfig.json 文件

Dan*_*cci 2 typescript tsc visual-studio-code

这不是一个重复的问题!请阅读详细信息以同意这一点!

我搜索了很多,找到了很多关于settings.json文件中以下设置的答案和文章:

{
  "typescript.tsdk": "node_modules/typescript/lib",
  "typescript.validate.enable": true,
}
Run Code Online (Sandbox Code Playgroud)

我有它们,但我的 VSCode 不想显示strict编译器选项产生的内联 TypeScript 错误(我有它tsconfig.json)。

如果我这样写:

const foo: number = "test";
Run Code Online (Sandbox Code Playgroud)

我可以看到Type 'string' is not assignable to type 'number'.,但是下面的简单脚本在 VSCode 中没有给出错误。

const { test } = process.env;
const tests = { test: "test" };

console.log(tests[test]);
Run Code Online (Sandbox Code Playgroud)

tscnode -r ts-node/register正确给出错误test.ts:4:19 - error TS2538: Type 'undefined' cannot be used as an index type.

我还尝试从 WSL2 和 WIndows 卸载并重新安装 VSCode,但没有帮助。

文件内容。

.vscode/扩展.json

{
  "recommendations": ["dbaeumer.vscode-eslint", "eg2.vscode-npm-script", "esbenp.prettier-vscode", "ms-python.python", "myh.preview-vscode", "rohit-gohri.format-code-action"]
}
Run Code Online (Sandbox Code Playgroud)

.vscode/设置.json

{
  "editor.codeActionsOnSave": ["source.formatDocument", "source.fixAll.eslint"],
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
  "eslint.alwaysShowStatus": true,
  "eslint.debug": true,
  "eslint.validate": ["javascript", "typescript"],
  "explorer.confirmDelete": false,
  "files.autoSave": "off",
  "files.eol": "\n",
  "files.insertFinalNewline": true,
  "files.trimFinalNewlines": true,
  "git.ignoreMissingGitWarning": true,
  "typescript.tsdk": "node_modules/typescript/lib",
  "typescript.validate.enable": true,
  "window.zoomLevel": 0,
  "[javascript]": { "editor.formatOnSave": false },
  "[python]": { "editor.defaultFormatter": "ms-python.python" },
  "[typescript]": { "editor.formatOnSave": false }
}
Run Code Online (Sandbox Code Playgroud)

.eslintrc.js

const rules = {
  "arrow-body-style":                           ["error", "as-needed"],
  "arrow-parens":                               ["error", "as-needed"],
  "arrow-spacing":                              "error",
  "brace-style":                                ["error", "1tbs", { allowSingleLine: true }],
  curly:                                        ["error", "multi-or-nest"],
  eqeqeq:                                       ["error"],
  indent:                                       ["error", 2],
  "key-spacing":                                ["error", { align: { afterColon: true, beforeColon: false, on: "value" } }],
  "keyword-spacing":                            ["error", { before: true, overrides: { catch: { after: false }, if: { after: false }, for: { after: false }, switch: { after: false }, while: { after: false } } }],
  "linebreak-style":                            ["error", "unix"],
  "no-console":                                 "warn",
  "no-mixed-spaces-and-tabs":                   ["error", "smart-tabs"],
  "nonblock-statement-body-position":           ["error", "beside"],
  "prefer-const":                               ["error", { destructuring: "all" }],
  semi:                                         ["error", "always"],
  "space-before-function-paren":                ["error", { anonymous: "never", asyncArrow: "always", named: "never" }],
  "space-unary-ops":                            ["error", { nonwords: false, words: true, overrides: { "!": true } }],
  "@typescript-eslint/no-empty-function":       "off",
  "@typescript-eslint/no-empty-interface":      "off",
  "@typescript-eslint/type-annotation-spacing": ["error", { after: true, before: false, overrides: { arrow: { before: true } } }]
};

module.exports = {
  env: {
    amd:     true,
    browser: true,
    es6:     true,
    jquery:  true,
    node:    true
  },
  extends:       ["plugin:@typescript-eslint/recommended"],
  parser:        "@typescript-eslint/parser",
  parserOptions: {
    ecmaVersion: 9,
    sourceType:  "module"
  },
  root: true,
  rules
};
Run Code Online (Sandbox Code Playgroud)

包.json

{
  "author": "Daniele Ricci <daniele.icc@gmail.com> (https://github.com/iccicci)",
  "dependencies": {},
  "description": "test",
  "name": "test",
  "license": "MIT",
  "devDependencies": {
    "@types/node": "17.0.0",
    "@typescript-eslint/eslint-plugin": "5.7.0",
    "@typescript-eslint/parser": "5.7.0",
    "eslint": "8.5.0",
    "prettier": "2.5.1",
    "ts-node": "10.4.0",
    "typescript": "4.5.4"
  },
  "prettier": {
    "arrowParens": "avoid",
    "endOfLine": "lf",
    "jsxBracketSameLine": true,
    "printWidth": 200,
    "trailingComma": "none",
    "useTabs": false
  },
  "scripts": {
    "test": "node -r ts-node/register test.ts",
    "start": "tsc --declaration"
  }
}
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

{
  "compilerOptions": {
    "alwaysStrict": true,
    "esModuleInterop": true,
    "declaration": true,
    "module": "commonjs",
    "noImplicitAny": true,
    "noImplicitThis": true,
    "noImplicitReturns": true,
    "target": "es2017",
    "strict": true,
    "strictBindCallApply": true,
    "strictFunctionTypes": true,
    "strictNullChecks": true,
    "strictPropertyInitialization": true
  },
  "include": ["test.ts"]
}
Run Code Online (Sandbox Code Playgroud)

测试.ts

const { test } = process.env;
const tests = { test: "test" };

console.log(tests[test]);
Run Code Online (Sandbox Code Playgroud)

小智 6

我知道这已经过时了,但对于发现这一点的任何人来说,将 vscode 设置为使用工作区打字稿版本对我有用

IE。

Ctrl + Shift + P - Typesript:选择 Typesript 版本... - 使用工作区版本