2017-01-16 125 views
0

我在TypeScript 2.1.4,Visual Studio 2015 Update 3中發現紅色波浪型智能感知錯誤找不到姓名'Promise',例如下面的代碼顯示錯誤Promise:TypeScript找不到姓名'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上我曾嘗試以下:

  • 故宮從「ES6-承諾」安裝ES6-承諾--save和進口{}無極添加到源文件的頂部

    這確實會導致紅色波浪消失,但會導致構建錯誤「類型Promise不可分配以鍵入Promise。存在兩種不同類型的名稱,但它們不相關。」

    安裝和引用npm的ts-promise會產生相同的「存在這個名稱的兩種不同類型」錯誤。

  • 分型安裝DT〜ES6-墊片--save --global

    這會導致重複定義,例如重複在lib.es2015.core.d.ts標識符 'PROPERTYKEY'

  • 分型安裝DT〜ES6-承諾--save --global

    這會導致錯誤重複標識符 '無極' 在lib.es2015。 iterable.d.ts

  • 分型安裝藍鳥--source NPM --save

    這失敗編譯時錯誤「類型無極是不能分配給鍵入‘藍鳥’」,因爲HttpClient的返回JavaScript諾言,不藍鳥承諾。

  • NPM安裝ES6-墊片--save和NPM安裝@類型/ ES6-墊片--save-dev的

    這會導致重複定義,例如重複標識符 'PROPERTYKEY' 在lib.es2015.core.d.ts

  • NPM安裝ES6-承諾--save和NPM安裝@類型/ ES6-承諾--save-dev的

    原因錯誤重複標識符在lib.es2015.iterable.d.ts中的'Promise'

  • in tsconfig.json,將「lib」:[「es2015」,「dom」]修改爲「lib」:[「es2015」,「es2015。承諾「,」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 
    } 
} 

也許我沒有正確地引用所需的庫,所以如果有人能指出錯誤我將不勝感激。

回答

1

試試這個配置對於​​庫

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

如果其他類型的缺失(RequestResponseBufferSourceURLSearchParams ...)請發送您的typings.json文件。

+0

將「es6」添加到tsconfig.json沒有區別。沒有其他缺失的類型。 – Alastair

+0

@Alastair Promise 在lib.es2015.iterable.d.ts中定義。 標準安裝路徑:C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TypeScript \ lib。 es2015.iterable.d.ts 是否安裝了TypeScript 2.1.4以上的其他版本? 您是否通過Aurelia-CLI設置了您的Aurelia項目? – Myrddhin

+0

關於TypeScript版本:我使用的是PATH中指定的2.1.4以及項目的TypeScriptToolsVersion元素。當我安裝TypeScript 2.1.4時,它安裝在C:\ Program Files(x86)\ Microsoft SDKs \ TypeScript \ 2.1中,但是您提到的文件也存在。 WinMerge將兩個文件顯示爲幾乎相同(Promise和所有其他定義相同),儘管Microsoft SDK中的版本還包含一個ReadonlyArray接口定義。 – Alastair