我正在尝试在使用create-react-app --typescript
创建的React项目中使用react-csv-reader软件包。由于react-csv-reader不附带类型声明文件,因此我自己创建了一个。我创建了一个文件types/react-csv-reader/index.d.ts
。 VS Code的Intellisense可以很好地找到(我可以在我使用react-csv-reader的模块中命令单击该函数的名称,并将其带到声明文件。它也抱怨当我没有所有必需的道具等时。
但是当我运行npm start
时,我得到了:
Failed to compile.
./src/screens/ReadCsv.tsx
Module not found: Can't resolve '../types/react-csv-reader' in '/my/proj/root/src/screens'
这是我的index.d.ts
:
import React from 'react'
interface CSVReaderProps {
cssClass?: string
cssInputClass?: string
label?: string
onFileLoaded: (data: any, filename: string) => void
onError: () => void
inputId?: string
inputStyle?: any
parserOptions?: any
}
declare const CSVReader: React.SFC<CSVReaderProps>
export default CSVReader
答案 0 :(得分:0)
因为打字稿不知道定义文件在哪里,所以必须在tsonfig.json中告诉他。
{
"compilerOptions": {
"typeRoots" : [
"node_modules/@types",
"./your/types/folder"
]
}
}
请注意,我添加了node_modules
,否则不包括其类型。
https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types
答案 1 :(得分:0)
完成这项工作的正确组合是:
declare module 'react-csv-reader' {}
块中的index.d.ts中import CSVReader from 'react-csv-reader'
,而不是我正在做的import CSVReader from '../types/react-csv-reader'
。我不必更改tsconfig.json中的任何内容。我仍然不明白为什么就VS Code Intellisense而言,它为什么能起作用,但是这种方式可以解决这个问题,并且被React高兴地编译。