在 TypeScript 中找不到模块的声明文件

Posted

技术标签:

【中文标题】在 TypeScript 中找不到模块的声明文件【英文标题】:Could not find a declaration file for module in TypeScript 【发布时间】:2020-08-02 17:07:44 【问题描述】:

我在我的网络应用程序中使用 react-facebook-login 库和 TypeScript。我还安装了@types/react-facebook-login。当我像这样导入库时,一切正常:

import ReactFacebookLogin from 'react-facebook-login'

但是,这个库允许导入没有任何样式的组件(这就是我想要的):

import ReactFacebookLogin from 'react-facebook-login/dist/facebook-login-render-props'

在这种情况下会出现错误:

找不到模块“react-facebook-login/dist/facebook-login-render-props”的声明文件

我的tsconfig.json 是用create-react-app app --template typescript 创建的:


  "compilerOptions": 
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react"
  ,
  "include": [
    "src"
  ]

有什么办法可以解决吗?

【问题讨论】:

【参考方案1】:

?

只需将以下代码添加到react-app-env.d.ts

declare module 'react-facebook-login/dist/facebook-login-render-props' 
  export interface RenderProps 
    onClick:
      | ((event: React.MouseEvent<htmlButtonElement, MouseEvent>) => void)
      | undefined;
    isDisabled: boolean;
    isProcessing: boolean;
    isSdkLoaded: boolean;
  

  interface ReactFacebookLoginProps 
    appId: string;
    callback(userInfo: ReactFacebookLoginInfo): void;
    onFailure?(response: ReactFacebookFailureResponse): void;

    autoLoad?: boolean;
    buttonStyle?: React.CSSProperties;
    containerStyle?: React.CSSProperties;
    cookie?: boolean;
    cssClass?: string;
    disableMobileRedirect?: boolean;
    fields?: string;
    icon?: string | React.ReactNode;
    isDisabled?: boolean;
    language?: string;
    onClick?(event: React.MouseEvent<HTMLDivElement>): void;
    reAuthenticate?: boolean;
    redirectUri?: string;
    scope?: string;
    size?: 'small' | 'medium' | 'metro';
    textButton?: string;
    typeButton?: string;
    version?: string;
    xfbml?: boolean;
    isMobile?: boolean;
    tag?: Node | React.Component<any>;
    render(props: RenderProps): void;
  

  interface ReactFacebookFailureResponse 
    status?: string;
  

  interface ReactFacebookLoginInfo 
    id: string;
    accessToken: string;
    name?: string;
    email?: string;
  

  interface ReactFacebookLoginState 
    isSdkLoaded?: boolean;
    isProcessing?: boolean;
  

  export default class ReactFacebookLogin extends React.Component<
    ReactFacebookLoginProps,
    ReactFacebookLoginState
  > 

【讨论】:

以上是关于在 TypeScript 中找不到模块的声明文件的主要内容,如果未能解决你的问题,请参考以下文章

Claudia.js create 在 typescript 项目中找不到模块 lambda

TypeScript 导入语句在 Expo 项目中找不到 Firebase 模块

typescript在@types中找不到模块

使用纱线工作区时,tsc 在 apollo-server 中找不到 express 的声明文件

找不到模块“firebase”或其相应的类型声明。 React + TypeScript + Firebase

rxjs 模块在 VS2019 中找不到,但在 tsc cli 中找到