我对最新的TypeScript 2.1.4版本感到非常兴奋,因为说服我的团队使用TS的一个重要因素是能够导入已安装的模块而无需为其找到或创建类型定义{{3 }}。然而,出于某种原因,这似乎没有像宣传的那样工作,因为我仍然收到错误消息,告诉我无法找到模块。当我为我的模块安装类型时(在这种情况下为React)它可以正常工作。
这是我的package.json:
{
"name": "my_app_name",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "webpack-dev-server --colors --port 8282"
},
"dependencies": {
"react": "^15.4.1",
"react-dom": "^15.4.1"
},
"devDependencies": {
"awesome-typescript-loader": "^3.0.0-beta.9",
"source-map-loader": "^0.1.5",
"typescript": "^2.1.4",
"webpack": "^1.14.0",
"webpack-dev-server": "^1.16.2"
}
}
我的tsconfig.json:
{
"compilerOptions": {
"outDir": "./dist/",
"module": "commonjs",
"target": "esnext",
"jsx": "react"
},
"include": [
"./**/*"
]
}
用于复制此问题的React组件的示例.tsx文件:
import * as React from "react";
export interface HelloProps { compiler: string; framework: string; }
export const Hello = (props: HelloProps) => {
return <h1>Hello from {props.compiler} and {this.props.framework}!</h1>
};
我还继续创建了另一个复制此问题的项目并将其上传到implicit any imports provide。任何帮助将不胜感激。如果这对TypeScript本身来说是一个问题,我将确保在Github repo上创建一个问题。
答案 0 :(得分:1)
看起来隐式导入并不总是有效。当我修复您的package.json
(在scripts
中删除了跟踪逗号)和tsconfig.json
(将bin
添加到exclude
)时,我发现了这些错误打字稿2.1.4:
src/greeter.tsx(2,24): error TS2307: Cannot find module 'react-modal'.
src/greeter.tsx(19,26): error TS2339: Property 'setState' does not exist on type 'Greeter'.
我想我会对第一个解释。在package.json
react-modal
中,main
属性为
"main": "./lib/index",
但实际文件的扩展名为.js
,即./lib/index.js
。
当我将main
中的node_modules/react-modal/package.json
更改为
"main": "./lib/index.js",
第一个错误就消失了。
我认为它确实是TypeScript的一个问题。
答案 1 :(得分:0)
尝试添加tsconfig并启用和禁用noImplicitAny:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es2015", "dom"],
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true,
"typeRoots": [
"../../node_modules/@types/"
]
}
}