2017-03-08 118 views
2

我正在构建一个客户端/服务器JS应用程序,并且使用Promises有一个大问题。它们要么是未定义的,要么是重复的,它似乎取决于@types包。Typescript typings - 重复名称Promise /无法找到名字Promise

npm install --save @types/es6-promise` 

这会给服务器象这样的错误:

cd ../server 
➜ server git:(master) ✗ tsc 
../node_modules/@types/es6-promise/index.d.ts(11,15): error TS2300: Duplicate identifier 'Promise'. 
../node_modules/@types/es6-promise/index.d.ts(42,19): error TS2300: Duplicate identifier 'Promise' 
.../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es6.d.ts(4936,11): error TS2300: Duplicate identifier 'Promise'. 
../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es6.d.ts(5261,11): error TS2300: Duplicate identifier 'Promise'. 
../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es6.d.ts(5511,13): error TS2300: Duplicate identifier 'Promise'. 
../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es6.d.ts(5737,11): error TS2300: Duplicate identifier 'Promise'. 
➜ server git:(master) ✗ 

如果我删除该程序包,然后我得到的客户端错误:

tsc 
src/components/GeneralChatAdminInputArea.tsx(100,14): error TS2304: Cannot find name 'Promise'. 
src/components/GeneralChatAdminInputArea.tsx(103,16): error TS2304: Cannot find name 'Promise'. 
src/routes/users/index.ts(11,21): error TS2304: Cannot find name 'Promise'. 
src/routes/users/index.ts(12,21): error TS2304: Cannot find name 'Promise'. 
src/routes/users/index.ts(13,3): error TS2304: Cannot find name 'Promise'. 

有什么出路呢?

我tsconfig.json看起来是这样的:

{ 
    "compilerOptions": { 
     "sourceMap": true, 
     "noImplicitAny": false, 
     "target": "es6", 
     "jsx": "react", 
     "module": "commonjs", 
     "moduleResolution": "node", 
     "isolatedModules": false, 
     "experimentalDecorators": true, 
     "emitDecoratorMetadata": true, 
     "declaration": false, 
     "removeComments": true, 
     "noLib": false, 
     "preserveConstEnums": true, 
     "suppressImplicitAnyIndexErrors": true, 
     "noUnusedLocals": true 
    }, 
    "filesGlob": [ 
     "**/*.ts", 
     "**/*.tsx", 
     "**/*.tsd" 
    ], 
    "compileOnSave": true, 
    "buildOnSave": false, 
    "atom": { 
     "rewriteTsconfig": false 
    } 
} 

这里的显示问题来来去去另一个版本

客户端编译罚款

➜ author git:(402-compile-errors) ✗ cd client 
➜ client git:(402-compile-errors) ✗ tsc 
➜ client git:(402-compile-errors) ✗ cd ../server 

但服务器失败

➜ server git:(402-compile-errors) ✗ tsc 
../node_modules/@types/es6-promise/index.d.ts(11,15): error TS2300: Duplicate identifier 'Promise'. 
../node_modules/@types/es6-promise/index.d.ts(42,19): error TS2300: Duplicate identifier 'Promise'. 
../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es6.d.ts(4936,11): error TS2300: Duplicate identifier 'Promise'. 
../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es6.d.ts(5261,11): error TS2300: Duplicate identifier 'Promise'. 
../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es6.d.ts(5511,13): error TS2300: Duplicate identifier 'Promise'. 
../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es6.d.ts(5737,11): error TS2300: Duplicate identifier 'Promise'. 

删除库,现在服务器将编译

➜ server git:(402-compile-errors) ✗ rm -rf ../node_modules/@types/es6-promise 
➜ server git:(402-compile-errors) ✗ tsc          
➜ server git:(402-compile-errors) ✗ cd ../client 

但现在客户端无法

➜ client git:(402-compile-errors) ✗ tsc 
src/components/GeneralChatAdminInputArea.tsx(100,14): error TS2304: Cannot find name 'Promise'. 
src/components/GeneralChatAdminInputArea.tsx(103,16): error TS2304: Cannot find name 'Promise'. 
src/routes/users/index.ts(11,21): error TS2304: Cannot find name 'Promise'. 
src/routes/users/index.ts(12,21): error TS2304: Cannot find name 'Promise'. 
src/routes/users/index.ts(13,3): error TS2304: Cannot find name 'Promise'. 
➜ client git:(402-compile-errors) ✗ 

所以它似乎是一个catch22

+0

难道unional的回答你的工作?你在哪里添加了这个lib选项? –

回答

1

tsconfig.json缺少lib

// tsconfig.json 
{ 
    "compilerOptions": { 
    "lib": [ 
     "es2015" 
    ] 
    } 
} 
+0

即使我瞄准es6?这是从哪里来的? – dcsan

+1

我也有单独的tsconfig客户端和服务器,那咒语应该去哪里? – dcsan

+0

我试过这个,并得到'错误TS5023:未知的编译器选项'lib'.'这是与'TSC 1.5.3' – dcsan