TypeScript 找不到名称“Promise”智能感知错误

问题描述 投票:0回答:2

我在 TypeScript 2.1.4、Visual Studio 2015 Update 3 中收到红色波浪状智能感知错误,提示 找不到名称“Promise”,例如,以下代码显示了 Promise 的两种使用时的错误:

/// <reference path="../typings/index.d.ts" />
import 'fetch';
import {HttpClient, json} from 'aurelia-fetch-client';
import {inject} from 'aurelia-framework';
import {BearerToken} from './common/bearer-token';

export class ApiToken
{
....
    public getTokenSimplified(): Promise<BearerToken>
    {
        let tokenResult: BearerToken;

        let p = new Promise<BearerToken>(function (resolve, reject)
        {
            // my code ommited
        });
        return p;
    }
....
}

TypeScript 编译时没有错误,所以我可以解决这个问题,但我想找到一个解决方案。有谁知道如何解决这个问题?研究了 StackOverflow 和 Github 后,我尝试了以下方法:

  • npm install es6-promise --save,并导入 {Promise} from 'es6-promise' 添加到源文件顶部

    这确实会导致红色波浪线消失,但会导致构建错误“类型 Promise 无法分配给类型 Promise。存在具有此名称的两种不同类型,但它们不相关。”

    安装并引用 npm 的 ts-promise 会导致相同的“存在具有此名称的两种不同类型”错误。

  • 输入 install dt~es6-shim --save --global

    这会导致重复的定义,例如lib.es2015.core.d.ts 中存在重复的标识符“PropertyKey”

  • 输入 install dt~es6-promise --save --global

    这会导致 lib.es2015.iterable.d.ts 中出现重复标识符“Promise”错误

  • 输入 install bluebird --source npm --save

    此操作失败,并出现编译时错误“Type Promise is not assignable to type 'Bluebird'”,因为 HttpClient 返回 Javascript Promises,而不是 Bluebird Promises。

  • npm install es6-shim --save 和 npm install @types/es6-shim --save-dev

    这会导致重复的定义,例如lib.es2015.core.d.ts 中存在重复的标识符“PropertyKey”

  • npm install es6-promise --save 和 npm install @types/es6-promise --save-dev

    导致错误 lib.es2015.iterable.d.ts 中重复标识符“Promise”

  • 在 tsconfig.json 中,将 "lib": ["es2015", "dom"] 修改为 "lib": ["es2015", "es2015.promise", "dom"] 并没有解决问题。

tscconfig.json 如下:

{
  "compileOnSave": false,
  "compilerOptions": {
    "rootDir": "src",
    "outDir": "dist",
    "sourceMap": true,
    "target": "es5",
    "module": "amd",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "moduleResolution": "node",
    "lib": ["es2015", "dom"],
    "baseUrl": "./",
    "paths": {
      "src/*": ["src/*"]
    }
  },
  "filesGlob": [
    "./src/**/*.ts",
    "./test/**/*.ts",
    "./typings/index.d.ts",
    "./custom_typings/**/*.d.ts",
    "./jspm_packages/**/*.d.ts"
  ],
  "exclude": [
    "node_modules",
    "jspm_packages",
    "dist",
    "build",
    "test"

  ],
  "atom": {
    "rewriteTsconfig": false
  }
}

也许我没有正确引用所需的库,所以如果有人能指出错误,我将不胜感激。

typescript2.0
2个回答
1
投票

尝试使用此库配置

"lib": ["es2015", "dom", "es6"]

如果缺少其他类型(

Request
Response
BufferSource
URLSearchParams
,...),请发送您的typings.json 文件。


0
投票

我也发生过。不知何故,智能感知没有选择打字稿配置。只需手动将其指向您的打字稿配置即可。

Setings > Languages & Frameworks > TypeScript

在“选项”字段中输入

-p
加上项目打字稿配置的路径,例如
-p tsconfig.json

© www.soinside.com 2019 - 2024. All rights reserved.