2016-07-01 39 views
0

我正在尝试将现有的JavaScript应用程序转换为TypeScript。为了能够一步一步做到这一点,我开始编译使用编译器选项“allowJs”的现有JavaScript代码。当我开始将现有文件转换为TypeScript时,我在创建名称空间时遇到了错误。将项目转换为Typescript时出现“重复的标识符”错误

所以,一个基本的例子。我有这两个文件,一个新的打字稿文件:

namespace myapp { 
    export var c1 = 5; 
} 

而且旧的JavaScript文件:

​​

这就导致了一个有效的JavaScript输出,但会出现一个错误:

error TS2300: Duplicate identifier 'myapp'. 

有什么办法可以避免出现这个错误或其他任何方式来转换所有使用相同名称空间的文件?

我tsconfig.json:

{ 
    "compilerOptions": { 
     "allowJs": true, 
     "outDir": "dist" 
    } 
} 
+0

我认为一个更好的方法可能是用typescript来编译你的.ts文件,然后使用一个像webpack这样的工具来创建你的应用程序和所有生成和实现的文件 – iberbeu

+0

Bundling不应该成为目前的问题,或者更确切地说,时间。现在,我们只是单独包含所有脚本文件,但这绝对是事后研究的内容。但现在,这更多是编译时问题。 – TSS

回答

0
tsconfig.json提供任何“文件”

或“排除”字段包含或排除分别文件。

{ 
    "compilerOptions": { 
     "allowJs": true, 
     "outDir": "dist" 
    }, 
    "files" : ["/path/to/ts/file.ts", ...] 

} 

OR

{ 
    "compilerOptions": { 
     "allowJs": true, 
     "outDir": "dist" 
    }, 
    "exclude" : ["node_modules", "/path/to/build/js/"] 

} 

之所以这个问题是打字稿编译器知道原件(打字稿)源文件和transpiled(JavaScript)的文件,从而获得相同的参考两次。现在你的工作是只包括源打字稿文件或排除所有非打字稿文件。

+0

理想情况下,我希望能够在转换时编译旧的JS和新的TS文件,但这可能是一个解决方案,直到一切都转换完成。 – TSS

+0

如果您想允许js和ts都尝试从ts文件中排除自动生成的js文件。 – Lekhnath

+0

这些不应该是一个问题,它似乎像TypeScript忽略它们。实际上,TypeScript对于覆盖JavaScript和TypeScript文件的重复定义有点过于严格。 因为TypeScript将生成类似 var myapp; ... ... var myapp; 。 – TSS

相关问题