代码之家  ›  专栏  ›  技术社区  ›  Anthony Kong

typescript中可为null的函数变量的正确类型是什么?

  •  0
  • Anthony Kong  · 技术社区  · 6 年前

    我有这段代码

    let anchorRenderer: string => React.Component;  // line 658
    if (link) {
        if (userAnchorRenderer) {
          anchorRenderer = userAnchorRenderer;  // line 661
        } else {
          anchorRenderer = (link: string) => <a className={styles.link} href={link}/>    // line 663
        }
    }
    
    ...
    
    // Usage of the function 
    return <div>
        {anchorRenderer && anchorRenderer(link)})   
     </div>
    

    但是我不能正确地得到类型声明。

    在这个版本中,我得到了以下错误:

    Error:(663, 11) TS2322: Type 'P["anchorRenderer"]' is not assignable to type 'string'.
      Type '((link: string) => Component<{}, {}, any>) | undefined' is not assignable to type 'string'.
        Type 'undefined' is not assignable to type 'string'.
    Error:(663, 11) TS2322: Type '(link: string) => Element' is not assignable to type 'string'.
    

    如果我把变量声明改为

    let anchorRenderer: string => React.Component | undefined;
    

    Error:(658, 35) TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nurbol Alpysbayev    6 年前

    改变

    let anchorRenderer: string => React.Component | undefined;
    

    let anchorRenderer: (str: string) => React.Component | undefined;
    

    https://github.com/Microsoft/TypeScript/issues/3693 ),还必须在类型声明中使用paren(与js arrow函数相反)。

    推荐文章