打字稿:为什么Visual Studio代码没有报告与命令行tsc相同的错误? [英] Typescript: Why doesn't visual studio code report the same errors that the command line tsc does?

查看:74
本文介绍了打字稿:为什么Visual Studio代码没有报告与命令行tsc相同的错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我故意在代码中输入错误,将会收到错误消息.这是正确的代码:

If I intentionally make a typo in my code I will get an error. Here is the correct code:

declare const State: TwineState;

如果我删除最后一个字符,然后在命令行上键入tsc,它会给我这个错误:

If I delete the last character and then type tsc on the command line, it gives me this error:

tsc/prod.spec.ts:7:22 - error TS2304: Cannot find name 'TwineStat'.

7 declare const State: TwineStat;

但是Visual Studio Code似乎没有意识到有任何错误.

But Visual Studio Code doesn't seem to realize there's any error.

如何让我的编辑器向我显示与tsc命令相同的错误?我对所有这些技术都还很陌生,所以我不知道哪些信息可以帮助您进行故障排除,但这是我的配置文件:

How I get my editor to show me the same errors that the tsc command recognizes? I'm pretty new to all these technologies so I don't know what information would be helpful to troubleshoot, but here are my config files:

package.json:

package.json:

{
...
  "version": "1.0.0",
  "main": ".webpack/main",
  "scripts": {
    "compile-typescript": "tsc && cp tscbuild/prod.js story/",
    "lint": "eslint tsc/** --fix",
    "test": "npm run lint && ts-node node_modules/jasmine/bin/jasmine && npm run compile-typescript ..."
  },
  "keywords": [],
...
  "devDependencies": {
    "@types/jasmine": "^3.5.9",
    "@types/node": "^13.9.1",
    "@typescript-eslint/eslint-plugin": "^2.24.0",
    "@typescript-eslint/parser": "^2.24.0",
    "eslint": "^6.8.0",
    "eslint-plugin-testcafe": "^0.2.1",
    "jasmine": "^3.5.0",
    "testcafe": "^1.8.2",
    "ts-node": "^8.6.2",
    "typescript": "^3.7.0"
  },
  "dependencies": {}
}

tsconfig.json:

tsconfig.json:

{
  "compilerOptions": {
    /* Basic Options */
    // "incremental": true,                   /* Enable incremental compilation */
    "target": "es5",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    "lib": ["es6","dom"],                           /* Specify library files to be included in the compilation. */
    "allowJs": false,                         /* Allow javascript files to be compiled. */
    // "checkJs": true,                       /* Report errors in .js files. */
    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
    // "outFile": "./",                       /* Concatenate and emit output to single file. */
    "outDir": "tscbuild",                        /* Redirect output structure to the directory. */
    "rootDir": "tsc",                         /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    // "composite": true,                     /* Enable project compilation */
    // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
    // "removeComments": true,                /* Do not emit comments to output. */
    // "noEmit": true,                        /* Do not emit outputs. */
    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
    // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */

    /* Strict Type-Checking Options */
    "strict": true,                           /* Enable all strict type-checking options. */
    "noImplicitAny": true,                    /* Raise error on expressions and declarations with an implied 'any' type. */
    "strictNullChecks": true,              /* Enable strict null checks. */
    "strictFunctionTypes": true,           /* Enable strict checking of function types. */
    "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
    "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
    // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
    "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */

    /* Additional Checks */
    "noUnusedLocals": true,                /* Report errors on unused locals. */
    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
    "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
    "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */

    /* Module Resolution Options */
    // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
    // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
    // "typeRoots": [],                       /* List of folders to include type definitions from. */
    // "types": [],                           /* Type declaration files to be included in compilation. */
    // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
    "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
    // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */

    /* Source Map Options */
    // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */
    // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */
    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */

    /* Experimental Options */
    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */

    /* Advanced Options */
    "resolveJsonModule": true,                /* Include modules imported with '.json' extension */
    "forceConsistentCasingInFileNames": true  /* Disallow inconsistently-cased references to the same file. */
  }
}

.eslintrc.js:

.eslintrc.js:

module.exports = {
  env: {
    browser: true,
    es6: true,
    node: true,
    jasmine: true,
  },
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:testcafe/recommended"
  ],
  globals: {
    Atomics: "readonly",
    SharedArrayBuffer: "readonly"
  },
  parser: "@typescript-eslint/parser",
  parserOptions: {
    ecmaVersion: 2018,
    project: "./tsconfig.json",
  },
  plugins: ["@typescript-eslint", "testcafe"],
  rules: {
    quotes: ["error", "double"],
    "no-plusplus": ["off"],
    "@typescript-eslint/camelcase": ["off"]
  }
};

推荐答案

发生这种情况的原因可能有很多.有时这会发生在我身上,我无法解释为什么会发生这种情况,但是我注意到 tsconfig.json 中的 incremental 功能/标志会导致编译器缓存过时的数据这将导致这些差异.看来VSCode可能不使用 incremental 缓存的数据,而命令行却使用了.

There are probably a number of reasons that this happens. This sometimes happens to me and I can't explain why this happens but I have noticed that the incremental feature/flag in tsconfig.json can cause the transpiler to cache outdated data which would cause these differences. It appears that VSCode might not use the incremental cached data and the command line does.

有两种方法可以测试和修复此问题.一种是将tsconfig.json中的增量标记翻转为 false .完成此操作后,错误将出现在命令行中.问题是,当您将其翻转回 true 时,这些错误然后消失了.另一个选择是删除您的 outDir -通常称为 dist/ build/或类似名称.

There are two ways to test and fix this. One is the flip the flag for incremental in the tsconfig.json to false. When I've done this the errors will appear on the command line. Problem is that when you flip it back to true those errors then disappear. The other option is delete your outDir - often called dist/ or build/ or something similar.

我尚未确认的第三种选择是仅删除 tsconfig.tsbuildinfo 文件,该文件通常也位于 outDir 中.tsconfig.json中有一个名为 tsBuildInfoFile 的设置,该设置会将文件重定向到为该道具指定的任何值,因此,如果在outDir中找不到该文件,请尝试该位置.

A third option that I haven't confirmed is to delete the tsconfig.tsbuildinfo file only which is usually in the outDir as well. There's a setting in tsconfig.json called tsBuildInfoFile that will redirect this file to whatever value you specify for that prop so if you can't find it in the outDir try that location.

这篇关于打字稿:为什么Visual Studio代码没有报告与命令行tsc相同的错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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