2017-07-02 72 views
1

我有一個這樣的部件:defaultProps抑制不正確的流量的錯誤消息

// @flow 
import React from 'react'; 

type Props = { 
    level: number, 
    className: string, 
    children: any, 
    rest: any 
}; 

export const Heading = ({ 
    level = 1, 
    className, 
    children, 
    ...rest 
}: Props): React$Element<any> => { 
    const Tag = `h${level}`; 

    return (
    <Tag className={className} {...rest}> 
     {children} 
    </Tag> 
); 
}; 

Heading.displayName = 'Heading'; 

如果我通過無效的類型的級別屬性則沒有錯誤消息:

例如

<Heading level="3333">Labels</Heading> 

運行yarn flow回報:

沒有錯誤!

但如果我刪除了值的默認值,

export const Heading = ({ 
    level, 

我得到:

17:常量標籤= h${level};

^^^^^ undefined. This type cannot be coerced to const Tag = 
`h${level}`; ^^^^^^^^^^^ string 

這不是我希望發生的。

+0

該錯誤消息中的標記標記有問題。我想這是一個複製和粘貼錯誤? – trixn

+0

你檢查了我的答案嗎? – trixn

回答

0

this discussion有人在將boolean傳遞給模板字符串時遇到類似錯誤。答案是如下:

流量試圖幫助查找意外字符串類型轉換,所以你只需要包裝與String(true)這裏的布爾傳達明確意圖投。

流量顯示nullbooleanundefined相同的行爲。如果你將其中的一個傳遞給模板字符串,它會對你大吼。

建議的解決方案是顯式轉換level爲一個字符串,如果它是故意...

const Tag = `h${String(level)}`; 

...或(更好)來定義默認道具這完全有道理在這種情況下,因爲如果流量沒有在這裏抱怨,你會試圖呈現一個<hundefined>元素,這絕對不是你想要的。所以這不是一個不正確的錯誤信息。