我遇到以下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"
部分可以使代码正常运行,但是只有在添加条件时,我才会得到错误。
答案 0 :(得分:0)
Menu
是类型TItem
,它不是字符串。因此TItem
与字符串没有重叠。我猜有一个generic没有通过。
我发现库react-spring
使用TItem
。你在用那个吗?
如果您提供有关menu
的类型信息,我将添加更具体的答案。
顺便说一句,当您没有在Typescript中输入内容并保留所有推断出的内容(null
和any
)时,阅读时会遇到挑战。例如,将menu =>
代替(menu: SomeType) =>
。这将有助于避免这些类型的错误。根据经验,我尽量不要使用any
或null
。取而代之的是,我使用联合类型(通常也可以避免使用联合类型)和unknown
,如果我想拥有一个不包含任何允许使用可选值的值的变量。