react native - TypeScript - 如何排除其中一个类型定义?
我正在使用 react-native 和 TypeScript 创建一个网页 + 移动应用程序。所以本质上,我为两个不同的 TS 配置有两个不同的输出。
对于网页,我的目标是 es5,模块是 commonjs。所以我必须使用 es6-shim 类型定义来让 tsc 在转译时高兴。
对于移动端(不同的 tsconfig.json),我的目标是 es6,模块也是 es6。问题是这与 es6-shim 的类型定义冲突,tsc 会输出许多“重复标识符”错误。如果我移除 shim,tsc 就不会报错(但这样网页端的转译就无法工作)。
我尝试在 tsconfig 中排除移动端的类型声明,如下所示:
...
"exclude": [
"typings/globals/es6-shim",
...
...但没有成功,TypeScript 编译器无论如何都会找到类型(可能是因为 typings/index.d.ts 对 es6-shim 类型的引用),并且在移动构建时仍然输出许多“重复标识符”错误。
我是不是忽略的方式不对?我是不是想错了,还有其他方法可以解决这个问题吗?
答案#1
也请为 ES6 构建排除 typings/index.d.ts。
如果你在该文件中还有其他需要包含在 ES6 构建中的内容,那么将 es6-shim 的引用移到一个单独的 .d.ts 文件中用于 ES6 构建,并将其排除。
答案#2
如果你有两个不同的 tsconfig.json 文件,你可以有两个 typings 文件夹,每个文件夹分别包含适用于移动端/网页的相应文件。这在一定程度上取决于你的项目结构,如果有一个独立的目录,放置这些文件会比较合理。
然而,我可能也倾向于直接忽略你的 index.d.ts 文件,并为每种构建类型显式包含你的声明文件。例如。
移动 tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
},
"files": [
"core.ts",
"typings/globals/something_else.d.ts"
// Your other files to be compiled or declarations (everything bar your es6-shim)
]
}
然后你可以对网页做同样的操作,包括你的 es6-shim,或者干脆添加所有内容,即index.d.ts
