我在我的样式化组件中遇到此错误:
Type 'string | undefined' is not assignable to type 'WordBreak | undefined'.
它正在这里发生:
type PropsType = {
breakEverywhere?: boolean
breakWord?: boolean
}
const Text = styled.p<PropsType>(props => ({
wordBreak: getWordBreak(props),
}))
function getWordBreak(props: PropsType): string | undefined {
if (props.breakWord) {
return 'break-word'
}
if (props.breakEverywhere) {
return 'break-all'
}
}
这个问题可以通过去掉getWordBreak
函数中的类型注解string | undefined
来解决。但是我如何添加一个类型注解呢?它写着WordBreak
,但是google搜索WordBreak
类型定义没有任何结果,也没有VSCode帮助。有什么想法吗?
如果我用类似的方法把textAlign
抽象到,它会出现同样的问题,它会讨论TextAlign
类型,看起来csstype也没有帮助。
如果在已设置样式的构件中使用此函数:
textAlign: props.align ? TEXT_ALIGN[props.align] : undefined,
我有这个:
type AlignType = 'center' | 'end' | 'start'
const TEXT_ALIGN: Record<AlignType, string> = {
center: 'center',
end: 'right',
start: 'left',
}
然后我得到这个:
Types of property 'textAlign' are incompatible.
Type 'string | undefined' is not assignable to type 'TextAlign | undefined'.
Type 'string' is not assignable to type 'TextAlign | undefined'.ts(2345)
我可以用一个无类型函数来修复它:
function getTextAlign(align: AlignType) {
switch (align) {
case 'center':
return 'center'
case 'end':
return 'right'
default:
return 'left'
}
}
但是这很难看,我怎么能用Record
的方式或者更干净的方式来做呢?我怎么能访问这些类型呢?
1条答案
按热度按时间0x6upsns1#
看起来csstype也帮不上忙。
样式化组件类型是基于csstype的,所以你应该能够从那里得到你所需要的。
类型
WordBreak
位于csstype
的命名空间Property
中:将它与代码示例一起使用:
Playground链接