React找不到TypeScript声明模块

时间:2019-08-25 13:30:06

标签: reactjs typescript create-react-app

我正在尝试在使用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

2 个答案:

答案 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)

完成这项工作的正确组合是:

  1. 将所有内容都放在declare module 'react-csv-reader' {}块中的index.d.ts中
  2. 将其导入为import CSVReader from 'react-csv-reader',而不是我正在做的import CSVReader from '../types/react-csv-reader'

我不必更改tsconfig.json中的任何内容。我仍然不明白为什么就VS Code Intellisense而言,它为什么能起作用,但是这种方式可以解决这个问题,并且被React高兴地编译。