打字稿三元表达式错误,指出条件将始终返回“ false”

时间:2019-08-13 20:15:39

标签: reactjs typescript

我遇到以下Typescript错误:

  

此条件将始终返回“ false”,因为类型为“ TItem”和   ““聊天””没有重叠。 TS2367

以下代码:

const { menu } = state
return (
          <Transition items={menu}>
                {menu => menu === "Chat" // this is where the error occurs
                       ? (props => 
                            <>
                                <section style={props}>
                                    First Section
                                </section>
                            </>
                        )
                        :   
                        (props => 
                            <>
                                <section style={props}>
                                    Second Section
                                </section>
                            </>
                        ) 
                }
            </Transition>
)

状态menu来自我的减速器:

interface MyContextType {
    menu?: any,
}

const Context = createContext<MyContextType>({
    menu: null
})

其中action.payload是类似于“聊天”的字符串类型。因此console.log(menu)将显示“聊天”。从=== "Chat"中删除menu === "Chat"部分可以使代码正常运行,但是只有在添加条件时,我才会得到错误。

1 个答案:

答案 0 :(得分:0)

Menu是类型TItem,它不是字符串。因此TItem与字符串没有重叠。我猜有一个generic没有通过。

我发现库react-spring使用TItem。你在用那个吗?

如果您提供有关menu的类型信息,我将添加更具体的答案。

顺便说一句,当您没有在Typescript中输入内容并保留所有推断出的内容(nullany)时,阅读时会遇到挑战。例如,将menu =>代替(menu: SomeType) =>。这将有助于避免这些类型的错误。根据经验,我尽量不要使用anynull。取而代之的是,我使用联合类型(通常也可以避免使用联合类型)和unknown,如果我想拥有一个不包含任何允许使用可选值的值的变量。

相关问题