【发布时间】:2021-08-04 14:58:28
【问题描述】:
我正在尝试将道具传递给keyframe 元素并做一些条件动画。这是我的代码:
import styled, { keyframes } from "styled-components";
import {
PRIMARY,
SECONDARY,
DANGER,
TEXT,
OUTLINE,
} from "../../constans";
interface PropTypes {
color?: string;
variant?: string;
size?: string;
shadow?: boolean;
disabled?: boolean;
hoverAnimation?: boolean;
}
const StyledButton = styled.button<PropTypes>`
// [... SOME CODE ...]
animation: ${(props) => hoverAnimate(props)} 2s infinite;
`;
const hoverAnimate = (props: PropTypes) => keyframes`
100%{
color: ${() => {
console.log(props);
if (props.variant) {
if (props.color) {
return `var(--color-${props.color})`;
}
return "#444";
}
return "#fff";
}};
background: ${() => {
if (props.variant === TEXT || props.variant === OUTLINE)
return "#f00";
console.log("object");
if (props.color === PRIMARY) return "var(--color-primary)";
if (props.color === SECONDARY) return "var(--color-secondary)";
if (props.color === DANGER) return "var(--color-danger)";
return "var(--color-default)";
}};
}
`;
我做错了什么?
TS 抱怨:
'() => string' 类型的参数不能分配给'SimpleInterpolation' 类型的参数。 类型“() => string”缺少类型“readonly SimpleInterpolation[]”中的以下属性:concat、join、slice、indexOf 和其他 17 个。
然后,console.log(props) 打印:
object
它就像一个字符串。我无法在开发工具中扩展这个object(即使尝试解构)。
【问题讨论】:
标签: reactjs typescript css-animations styled-components react-props