【问题标题】:React can't find TypeScript declarations moduleReact 找不到 TypeScript 声明模块
【发布时间】:2019-12-29 23:14:22
【问题描述】:

我正在尝试在使用 create-react-app --typescript 创建的 React 项目中使用 react-csv-reader 包。由于 react-csv-reader 没有类型声明文件,我自己创建了一个。我创建了一个文件types/react-csv-reader/index.d.tsVS 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

【问题讨论】:

    标签: reactjs typescript create-react-app


    【解决方案1】:

    因为 typescript 不知道你的定义文件在哪里,所以你必须在你的 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

    【讨论】:

    • 这似乎没有任何效果。
    【解决方案2】:

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

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

    我不必更改 tsconfig.json 中的任何内容。就 VS Code Intellisense 而言,我仍然不明白为什么它以前可以工作,但是这种方式可以工作,并且可以由 React 愉快地编译。

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 2021-02-20
      • 2022-07-12
      • 2019-03-16
      • 2020-08-02
      • 2021-10-28
      • 2019-07-26
      • 2021-02-21
      • 2019-08-09
      相关资源
      最近更新 更多