使用带有 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 文件?