声明子文件夹模块

时间:2018-06-23 08:35:00

标签: reactjs typescript

我正在尝试为模块“ react-facebook-login / dist / facebook-login-render-props”(https://github.com/keppelen/react-facebook-login的一部分)创建类型。请注意,它在子文件夹中。

我用以下模块声明创建了一个d.ts文件:

declare module "react-facebook-login/dist/facebook-login-render-props" {

    interface RenderProps {
        onClick: Function;
        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;
    }

    class ReactFacebookLogin extends React.Component<
        ReactFacebookLoginProps,
        ReactFacebookLoginState
        > {}
}

但是似乎没有收到,因为我收到一个错误:

error TS7016: Could not find a declaration file for module 'react-facebook-login'. '.....\node_modules\react-facebook-login\dist\facebook-login-with-button.js' implicitly has an 'any' type.

我要怎么做才能键入该文件,该文件位于程序包的子文件夹中?

1 个答案:

答案 0 :(得分:1)

原来的问题不是文件位于子文件夹中。

对于寻找解决方案的Google员工来说,这就是我的最终结论:

declare module "react-facebook-login/dist/facebook-login-render-props" {

    export interface RenderProps {
        onClick: Function;
        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
        > {}
}