【问题标题】:Cannot find name 'Omit' in Typescript在打字稿中找不到名称“省略”
【发布时间】:2019-10-19 18:29:55
【问题描述】:

背景

我正在src/@types/index.d.ts 上制作我的自定义index.d.ts 文件。 我需要像下面这样合并我的类型。

// src/@types/index.d.ts
declare namespace Admin {
  interface InitialStateFromDB {
    teamSettings: {
      teamPasswords: TeamPassword[],
      teamCount: number
    },
    adminPasswords: string,
    postInfos: PostInfo[] | undefined
  }
  interface InitialState extends Omit<InitialStateFromDB, 'adminPasswords'> {
    adminPasswords: AdminPassword
  }
}

问题

我收到错误:VSCode Intellisense 的 Cannot find name 'Omit'.ts(2304)。但是编译效果很好。

所以,我做了省略类型type Omit&lt;T, K extends keyof T&gt; = Pick&lt;T, Exclude&lt;keyof T, K&gt;&gt;(复制到here

编译后又报错:'Omit' was also declared here.

在这种情况下我该怎么办?忽略 IntelliSense 的错误?

【问题讨论】:

  • 你尝试重启 VSCode 了吗?我有时会遇到输入错误,这些错误会在重新启动后消失。
  • @Mathyn 是的,我做到了,但同样的错误。
  • 你确定 VSCode 和你的编译器使用相同的 Typescript 版本吗?
  • @Mathyn 不,VSCode 使用 3.4.5,我的是 3.5.1
  • 如果您使用 3.4.5 版本编译会出现编译错误吗?

标签: typescript


【解决方案1】:

Omit 是最近才出现的added in TS 3.5.1,因此您可能在您的工作区中使用了还不支持它的旧版本的 TS。

通过关注these instructions,确保您的 VS Code 工作区使用与您正在编译的相同版本的 TypeScript。只需打开一个 TS 文件,在 VS Code 中运行 Select TypeScript Version 命令,然后选择使用您的工作区版本的 TypeScript(应该是 3.5.1)

【讨论】:

  • 我遇到了一个显示相同错误的插件,你能帮帮我吗,我什么都试过了
【解决方案2】:

尝试使用 "skipLibCheck": true 作为 tsconfig.json 文件中的 compilerOptions 之一

【讨论】:

    【解决方案3】:

    在 vscode 中按 ctrl + shift + p 并输入 TypeScript 并选择“TypeScript: Select TypeScript Version”

    【讨论】:

    • 考虑将此作为评论而不是答案发布。
    • 谢谢大佬,我是新来的,还不能评论
    • 获得这些特权只是时间问题
    【解决方案4】:

    使用打字稿版本 3.5.x

    如果您使用的是 Angular 版本 6,请将其升级到 8.2.2

    您可以在package.json查看以下软件包版本

    "dependencies": {
        "@angular-devkit/build-angular": "^0.803.24",
        "@angular/animations": "^8.2.2",
        "@angular/cdk": "^8.2.2",
        "@angular/common": "^8.2.2",
        "@angular/compiler": "^8.2.2",
        "@angular/core": "^8.2.2",
        "@angular/forms": "^8.0.0",
        "@angular/http": "^8.0.0-beta.10",
        "@angular/material": "^8.2.2",
        "@angular/platform-browser": "^8.2.2",
        "@angular/platform-browser-dynamic": "^8.2.2",
        "@angular/router": "^6.0.0",
        "@material/dialog": "^4.0.0",
        "@ng-bootstrap/ng-bootstrap": "^4.0.0",
        "@ngx-translate/core": "^10.0.1",
        "@ngx-translate/http-loader": "^3.0.1",
        "@syncfusion/ej2-angular-charts": "^17.4.51",
        "@syncfusion/ej2-angular-diagrams": "^17.4.51",
        "@syncfusion/ej2-angular-grids": "^17.4.51",
        "@syncfusion/ej2-diagrams": "^17.4.51",
        "chart.js": "^2.7.2",
        "core-js": "^2.5.5",
        "file-saver": "^2.0.1",
        "font-awesome": "^4.7.0",
        "html2canvas": "^1.0.0-alpha.3",
        "jspdf": "^1.5.3",
        "lodash": "^4.17.15",
        "ng2-charts": "^1.6.0",
        "nyc": "^15.1.0",
        "rxjs": "^6.4.0",
        "stream": "0.0.2",
        "timers": "^0.1.1",
        "xml2js": "^0.4.19",
        "yarn": "^1.6.0",
        "zone.js": "^0.9.1"
    },
    "devDependencies": {
        "@angular/cli": "^8.2.2",
        "@angular/compiler-cli": "^8.2.2",
        "@angular/language-service": "^8.2.2",
        "@types/jasmine": "~2.8.6",
        "@types/jasminewd2": "~2.0.3",
        "@types/lodash": "4.14.116",
        "@types/node": "^9.6.1",
        "@types/xml2js": "^0.4.3",
        "codelyzer": "~4.2.1",
        "jasmine-core": "~3.1.0",
        "jasmine-spec-reporter": "~4.2.1",
        "karma": "^4.4.1",
        "karma-chrome-launcher": "~2.2.0",
        "karma-cli": "~1.0.1",
        "karma-coverage-istanbul-reporter": "^1.4.2",
        "karma-jasmine": "~1.1.1",
        "karma-jasmine-html-reporter": "^1.0.0",
        "protractor": "^6.0.0",
        "ts-node": "~5.0.1",
        "tslint": "~5.9.1",
        "typescript": "^3.5.3"
    }
    

    【讨论】:

    • 你能解释一下为什么“使用打字稿版本 3.5.x”可能带有文档链接。您能否正确格式化您的答案。 “依赖项” blob 当前无用且不可读。
    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 2016-09-15
    • 2019-02-25
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2016-01-28
    • 2017-06-18
    相关资源
    最近更新 更多