使用 React Native 和 TypeScript 找不到变量符号

IT技术 javascript android reactjs typescript react-native
2021-04-29 01:46:52

Symbol在 React Native 项目中使用 ES6 这适用于 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在 Android 上被 TypeScript for React Native 正确处理?

3个回答

import 'core-js/es6/symbol'无需添加 npm 依赖项或复制粘贴 polyfill 即可使用

编辑:我怀疑这是一个 TS 问题。Android JS 运行时没有 Symbol 支持。我在普通 JSX 中也遇到了这个问题,并使用上面粘贴的代码段修复了它。

这根本是一个 TypeScript 问题。

你缺少一个 polyfill。

作为转译器,TypeScript 转换句法结构以表示它们的行为,但它不提供运行时库。

使用您选择的包管理器安装像这样的 es6-symbol polyfill,一切都会好起来的。

Symbol 是一个库,通常超出了转译的范围,至少从 TypeScript 团队的角度来看是这样。

这样做的部分动机是您可以选择自己的 polyfill 实现,从而为您提供灵活性。另一个想到的是,转译器经常在它有足够的信息来知道它是否可以排除 polyfill 之前被调用。

注意:--target已设置为,es2015但由于es2015运行时未提供指定的库,您在某些平台上遇到了困难我强烈建议您--target es5暂时减少使用

我建议的另一件事是在您的配置术语中保持一致。

"target": "es2015",
"lib": ["dom", "es7"],

令人困惑,应该改为

"target": "es2015",
"lib": ["dom", "es2016"],

为了读者

您可以在index.js不安装任何依赖项的情况下在根文件中导入这些

import "core-js/stable";
import "regenerator-runtime/runtime";