【发布时间】:2020-07-29 03:02:28
【问题描述】:
我使用以下方法创建了一个 TypeScript React 应用程序:
yarn create react-app my-app --template typescript
这样,我的项目用Babel编译,然后用webpack捆绑。现在我想使用 TypeScript namespaces,默认情况下 Babel 不支持,但它们 can be enabled。我安装了所有必要的软件包:
在package.json 中,我将react-scripts start 更改为react-app-rewired start。
最后,我创建了一个config-overrides.js 文件:
const {
override,
addExternalBabelPlugin
} = require("customize-cra");
module.exports = override(
addExternalBabelPlugin([
"@babel/plugin-transform-typescript",
{ allowNamespaces: true }
])
);
但是编译还是会抛出语法错误,好像没有启用插件一样:
语法错误:/home/m93a/my-app/script.ts:命名空间未标记为仅类型声明。非声明性命名空间仅在 Babel 中实验性地支持。要启用和查看警告,请参阅:https://babeljs.io/docs/en/babel-plugin-transform-typescript
如何正确设置我的项目,以便它甚至可以编译非声明性命名空间?
编辑:我的项目没有成功的原因实际上与我的想法完全不同。查看我自己的答案以获取更多详细信息。
【问题讨论】:
-
我建议只使用
ts-loader而不是babel并在tsconfig.json中打开jsx -
@LuketheGeek CRA 使用 Babel 和
@babel/preset-typescript插件。ts-loader与此问题无关,也与 CRA 无关。 -
@m93a 我已在我的答案中添加了一个工作演示存储库。请检查一下我的单个命名空间类(
People.Personinsidesrc/lib/Person.ts)是否与您的相同。你试过addBabelPlugin吗?如果它不适合您,请提供您如何声明和使用命名空间的示例。还有.babelrc选项,如果您想尝试一下,我可以将其添加到我的答案中。
标签: typescript webpack babeljs react-scripts