我正在使用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"
]
}
}
有什么办法解决吗?
答案 0 :(得分:1)
我可以看到您正在使用eslint。因此,可以安全地编辑编译器选项并添加
"noImplicitAny": false,
这将使您的错误保持沉默。 eslint会捕获代码中任何隐式的内容。
根据我的理解,我希望这是正确的:-)
答案 1 :(得分:0)
第 1 步:
在 package.json 中的“scripts”对象内,只需添加:
"postinstall": "npx typesync"
在这里使用 npx 的好处是它不需要你在你的机器上安装任何东西。
第 2 步:
运行 yarn 或 npm install 以有效运行“安装后”脚本。 添加完所有丢失的包后,您将获得要添加到项目中的所有新类型的列表
它可能看起来像这样:
? yourAppNameHere — package.json (4 new typings added, 0 unused typings removed)
├─ + @types/babel__core
├─ + @types/react-native-vector-icons
├─ + @types/react
第 3 步:
您可能会被要求再次运行 npm install 或 yarn,这将安装添加的软件包,您就可以开始了!