使用带有 TypeScript 的 React Native 找不到变量 Symbol
Posted
技术标签:
【中文标题】使用带有 TypeScript 的 React Native 找不到变量 Symbol【英文标题】:Can't find variable Symbol using React Native with TypeScript 【发布时间】:2018-08-02 13:35:24 【问题描述】:我在我的 React Native 项目中使用 ES6 Symbol
。这适用于 ios,但在 android 上我得到Can't find variable: Symbol
。
我正在使用 TypeScript,我尝试了各种 tsconfig.json
:
"compilerOptions":
"target": "es2015",
"jsx": "react",
"lib": ["dom", "es7"],
"moduleResolution": "node"
,
我也试过lib: ["dom", "es6"]
和["dom", "es6", "es7"]
以及target: "es5"
。
我怎样才能让 Symbol
被 TypeScript 正确处理以用于 Android 上的 React Native?
【问题讨论】:
我认为您的错误与 Typescript 或转译无关,它更像是原生 android java 问题。 我认为应该有办法让 TypeScript 根据目标转换Symbol
【参考方案1】:
这根本就是一个 TypeScript 问题。
你缺少一个 polyfill。
作为转译器,TypeScript 转换句法结构以表示它们的行为,但它不提供运行时库。
使用您选择的包管理器安装an es6-symbol polyfill like this one,一切都会好起来的。
Symbol 是一个库,一般来说超出了转译的范围,至少从 TypeScript 团队的角度来看是这样。
这样做的部分动机是您可以选择自己的 polyfill 实现,从而为您提供灵活性。另一个想到的是,转译器通常在它有足够的信息知道它是否可以排除 polyfill 之前就被调用。
注意:您的--target
设置为es2015
,但由于运行时未提供es2015
中指定的库,您在某些平台上遇到了困难。强烈建议你暂时少用--target es5
。
我建议的另一件事是在您的配置术语中保持一致。
"target": "es2015",
"lib": ["dom", "es7"],
比较混乱,应该改成
"target": "es2015",
"lib": ["dom", "es2016"],
为了读者
【讨论】:
【参考方案2】:您可以使用import 'core-js/es6/symbol'
,而无需添加 npm 依赖项或复制粘贴 polyfill
编辑:我怀疑这是一个 TS 问题。 Android JS 运行时不支持 Symbol。我在普通 JSX 中也遇到了这个问题,并使用上面粘贴的 sn-p 修复了它。
【讨论】:
是的。但它带有 ReactNative 或作为它的依赖项。不必自己添加另一个依赖项。 啊,我明白了。我想要一个通用的解决方案。无论如何,您的评论是正确的,它与 TS 无关。【参考方案3】:您可以在您的根index.js
文件中导入这些,而无需安装任何依赖项:
import "core-js/stable";
import "regenerator-runtime/runtime";
【讨论】:
以上是关于使用带有 TypeScript 的 React Native 找不到变量 Symbol的主要内容,如果未能解决你的问题,请参考以下文章
如何在 TypeScript 中使用带有 React 无状态功能组件的子组件?
如何在 React 上正确使用带有样式组件画布的 TypeScript 类型
如何使用带有 Typescript 的 React Hook 表单(输入组件)
你如何在带有 Typescript 的 create-react-app 中使用 Mocha?
带有 React、TypeScript 和 Webpack 的空白页面
React-native:如何在 React-native 中使用(和翻译)带有 jsx 的 typescript .tsx 文件?