我在 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
}
}
也许我没有正确引用所需的库,所以如果有人能指出错误,我将不胜感激。
尝试使用此库配置
"lib": ["es2015", "dom", "es6"]
如果缺少其他类型(
Request
、Response
、BufferSource
URLSearchParams
,...),请发送您的typings.json 文件。
我也发生过。不知何故,智能感知没有选择打字稿配置。只需手动将其指向您的打字稿配置即可。
Setings > Languages & Frameworks > TypeScript
在“选项”字段中输入
-p
加上项目打字稿配置的路径,例如-p tsconfig.json