在打字稿中找不到名称“省略”

Posted

技术标签:

【中文标题】在打字稿中找不到名称“省略”【英文标题】: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 版本编译会出现编译错误吗? 【参考方案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 当前无用且不可读。

以上是关于在打字稿中找不到名称“省略”的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 7 中找不到名称“require”(打字稿 3.1.3)

打字稿错误使用googlemaps javascript API时在ionic2中找不到名称'google'

开玩笑测试:在打字稿组件导入中找不到模块

Angular 4找不到名称错误

在打字稿中使用 fs

打字稿中的“三个点”是啥意思?