【问题标题】:JSX element type 'XXX' does not have any construct or call signaturesJSX 元素类型“XXX”没有任何构造或调用签名
【发布时间】:2016-03-05 15:51:51
【问题描述】:

我想在 typescript 中使用 material-ui。

/// <reference path="../../../typings/react/react.d.ts"/>
import React = __React;
import * as FlatButton from "material-ui/lib/flat-button";

interface ATCProps{
    clickHandler:__React.MouseEventHandler;
}

export default class AddToCartBtn extends React.Component<ATCProps,any>{
    render(){
        return (
            <FlatButton></FlatButton>  // -> error
        )
    }
}

flat-button.d.ts

declare module "material-ui/lib/flat-button" {
    import ReactElement = __React.ReactElement;
    import Component = __React.Component;
    interface FlatButton extends __React.Component<any,any>{
    }
    export default FlatButton;
}

错误:(15, 14) TS2604: JSX 元素类型“FlatButton”没有任何构造或调用签名。

【问题讨论】:

    标签: typescript jsx


    【解决方案1】:

    您需要将interface FlatButton 替换为class FlatButton。您导出的模块定义没有任何关联的值。

    【讨论】:

    【解决方案2】:

    首先:请试试这个。

    import FlatButton from "material-ui/lib/flat-button";
    

    第二:为什么会这样?

    它是默认导出

    // fileA: export default module
    declare let $: JQuery;
    export default $;
    
    // fileB: import module from default module
    import $ from "jquery";
    

    如果material-ui/lib/flat-button 是“默认导出”,我们应该使用不同的导入形式。

    第三:import * as FlatButton from "XXX"时发生了什么

    import * as FlatButton from "XXX" 表示将整个模块导入单个变量。

    // the outcome is an object with a default property
    {
      default: FlatButton(props)
    }
    

    更多内容在modules: default exports.

    【讨论】:

    • 嗨。欢迎来到堆栈溢出!虽然这可能会回答这个问题,但请您考虑解释一下您的答案吗?
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 2016-10-07
    • 2021-09-21
    • 2021-12-26
    • 2017-12-05
    • 1970-01-01
    • 2022-06-21
    • 2022-12-15
    相关资源
    最近更新 更多