reactjs - 反应选择样式和打字稿
问题描述
根据react-select 文档,我可以像这样访问传递给 Select 主体的我自己的参数:
const customStyles = {
menu: (provided, state) => ({
...provided,
width: state.selectProps.width,
borderBottom: '1px dotted pink',
color: state.selectProps.menuColor,
padding: 20,
}),
control: (_, { selectProps: { width }}) => ({
width: width
}),
singleValue: (provided, state) => {
const opacity = state.isDisabled ? 0.5 : 1;
const transition = 'opacity 300ms';
return { ...provided, opacity, transition };
}
}
但是,如果我在打字稿中有这样的东西
const customStyles: SelectProps["styles"] = {
valueContainer: (provided, { selectProps: { size } }) => {
const px = {
sm: "0.75rem",
md: "1rem",
lg: "1rem"
};
return {
...provided,
padding: `0.125rem ${px[size]}`
};
},
};
该${px[size]}
部分引发错误
Element implicitly has an 'any' type because expression of type 'any' can't be used to index type '{ sm: string; md: string; lg: string; }'.
解决方案
它表示传入size
的是一个any
类型,打字稿不知道它是否是 的键之一sm
md
lg
。
方式01:用于cast
通知打字稿,大小是其中之一sm
md
lg
const px = {
sm: "0.75rem",
md: "1rem",
lg: "1rem"
};
px[size as 'sm' | 'md' | 'lg']
方式02:有一个类型px
并使用它的键进行铸造
type PxType = { [k in 'sm' | 'md' | 'lg']: string }
const px: PxType = {
sm: "0.75rem",
md: "1rem",
lg: "1rem"
};
px[size as keyof PxType]
推荐阅读
- javascript - 在 javascript 中动态填充对象数组的问题
- ios - 'AppDelegate' 仅适用于 iOS 13.0 或更高版本
- amazon-web-services - 有人可以使用硬编码的“AWS-cognito-identity-poolID”侵入我的 s3 吗?
- java - Android 总是在没有 PocketSphinx 的情况下进行启动指令检测
- reactjs - Eslint 道具缺少使用 Formik 的验证
- sql - 优化 SELECT 查询以处理大型数据库
- python - 出现错误 a.empty、a.bool()、a.item()、a.any() 或 a.all()
- javascript - 如何在量角器茉莉花中报告每个测试的执行时间?
- amazon-web-services - AWS Rekognition:是否有任何 API 可以从集合中删除或取消索引人脸
- apache-spark - pyspark 跳过了一些导入阶段,这个阶段应该处理新数据,不应该被跳过