RN-找不到模块供应商的声明文件/ react-native-vector-icons

时间:2019-08-31 19:29:34

标签: react-native expo

我正在使用expo 34.0.1进行本机开发。我正在为项目使用TypeScript,并在测试脚本中开玩笑地运行tsc --project . --noEmit。这导致以下错误:

  

node_modules/@expo/vector-icons/build/createIconSet.d.ts:2:55-错误   TS7016:找不到模块的声明文件   './vendor/react-native-vector-icons/lib/create-icon-set'。   '../node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/create-icon-set.js'   隐式地具有“ any”类型。

     

2从以下位置导出{DEFAULT_ICON_COLOR,DEFAULT_ICON_SIZE}   './vendor/react-native-vector-icons/lib/create-icon-set';   找到1个错误。

     

npm错误!代码ELIFECYCLE npm ERR! errno 1 npm错误! @ tsc-test:tsc --project . --noEmit npm错误!退出状态1 npm ERR! npm ERR! @ tsc-test脚本失败。 npm ERR!这可能不是问题   npm。上面可能还有其他日志记录输出。

     

npm错误!有关此运行的完整日志,请参见:npm ERR!
  /Users/.npm/_logs/2019-08-31T19_25_49_598Z-debug.log

tsconfig.json:

{
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "module": "es6",
    "target": "es6",
    "lib": ["es2016", "esnext.asynciterable"],
    "jsx": "react-native",
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "types": ["jest"],
    "moduleResolution": "node",
    "allowJs": false,
    "esModuleInterop": true
  },
  "exclude": ["node_modules"]
}

package.json

{
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "test": "npm run tslint && npm run tsc-test && npm run jest",
    "tslint": "tslint --project .",
    "tsc-test": "tsc --project . --noEmit",
    "jest": "jest"
  },
  "dependencies": {
    "@types/enzyme": "^3.10.3",
    "expo": "^34.0.1",
    "moment": "^2.24.0",
    "react": "16.9.0",
    "react-dom": "^16.9.0",
    "react-moment": "^0.9.2",
    "react-native": "https://github.com/expo/react-native/archive/sdk-34.0.0.tar.gz",
    "react-native-elements": "^1.1.0",
    "react-native-gesture-handler": "~1.3.0",
    "react-native-reanimated": "~1.1.0",
    "react-native-vector-icons": "^6.6.0",
    "react-native-web": "^0.11.4",
    "react-navigation": "^3.12.1"
  },
  "devDependencies": {
    "@types/expo": "^32.0.13",
    "@types/jest": "^24.0.18",
    "@types/react": "^16.9.2",
    "@types/react-test-renderer": "^16.9.0",
    "enzyme": "^3.10.0",
    "enzyme-adapter-react-16": "^1.14.0",
    "jest": "^24.9.0",
    "jest-expo": "^34.0.1",
    "react-test-renderer": "^16.9.0",
    "ts-jest": "^24.0.2",
    "tslint": "^5.19.0",
    "tslint-config-airbnb": "^5.11.1",
    "typescript": "^3.5.3"
  },
  "private": true,
  "jest": {
    "preset": "jest-expo",
    "transform": {
      "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js",
      "^.+\\.tsx?$": "ts-jest"
    },
    "testMatch": [
      "**/__tests__/**/*.ts?(x)",
      "**/?(*.)+(spec|test).ts?(x)"
    ],
    "moduleFileExtensions": [
      "js",
      "ts",
      "tsx"
    ],
    "globals": {
      "ts-jest": {
        "tsConfig": {
          "jsx": "react"
        }
      }
    },
    "setupFilesAfterEnv": [
      "./src/setupTests.js"
    ]
  }
}

有什么办法解决吗?

2 个答案:

答案 0 :(得分:1)

我可以看到您正在使用eslint。因此,可以安全地编辑编译器选项并添加

"noImplicitAny": false,

这将使您的错误保持沉默。 eslint会捕获代码中任何隐式的内容。

根据我的理解,我希望这是正确的:-)

答案 1 :(得分:0)

第 1 步:

在 package.json 中的“scripts”对象内,只需添加:

"postinstall": "npx typesync"

在这里使用 npx 的好处是它不需要你在你的机器上安装任何东西。

第 2 步:

运行 yarnnpm install 以有效运行“安装后”脚本。 添加完所有丢失的包后,您将获得要添加到项目中的所有新类型的列表

它可能看起来像这样:

? yourAppNameHere — package.json (4 new typings added, 0 unused typings removed)
├─ + @types/babel__core
├─ + @types/react-native-vector-icons
├─ + @types/react

第 3 步:

您可能会被要求再次运行 npm installyarn,这将安装添加的软件包,您就可以开始了!