reactjs - Typescript 将 React CSS 键类型添加到对象键
问题描述
我稍微修改了一个名为 ReactCSS 的库。我稍微更改了函数的类型定义,直到最近我才意识到 CSS 属性position
会抛出错误,因为键类型是string
并且它想要Position | undefined
。
Types of property 'position' are incompatible.
Type 'string' is not assignable to type 'Position | undefined'.
我认为我必须做的是遍历样式的所有键并将它们的类型更改为 CSS 属性中的相应类型。例如,它将转换:
"position": string,
至:
"position": Position | undefined,
理论上它可能是这样的:
type CSSClasses<T extends { [key: string]: string }> = {
[K in keyof T]: React.CSSProperties[K] || T[K]
}
因此它将类型设置为 CSS 类型,否则它将保持其原始类型。
这确实有效:
type CSSClasses<T extends { [key: string]: string }> = {
[K in keyof T]: React.CSSProperties
}
但是,它使用户可以访问所有 CSS 属性,其中大多数是未定义的,因为它们尚未由用户在对象中定义。
T
可能是这样的对象:
{
div: {
color: "red",
position: "absolute",
},
span: {
color: "blue",
position: "relative",
}
}
所以我必须遍历对象,该对象的键,然后正确设置它们的类型。
但是它允许用户访问所有 CSS 属性
关于上述对象,这意味着:
object.div.color // "red"
object.div.background // "undefined" -- shouldn't be a property because the user hasn't defined it
object.div // has all CSS properties
我该怎么做呢?
解决方案
推荐阅读
- c# - 到达对话流程中的某个步骤时,自动从聊天机器人视图切换到 ionic 移动应用程序页面
- jquery - 如何在 jquery 回调函数中发送 Typescript 变量?
- java - 如何在每天的特定时间使用 java 发送邮件
- r - 如何在 R-Shiny 中实现未来功能
- game-engine - gdscript 全局变量值在 get_tree().reload_current_scene() 之后没有改变
- apache-spark - 默认情况下,Spark sql 模式中的可空性是建议性的。严格执行它的最佳方法是什么?
- swift - 如何初始加载 UITableView 然后观察 Firebase 节点以更改在 Swift 中刷新 tableview?
- azure-devops - 防止用户在 Azure Devops (VSTS) 中创建没有父级的工作项
- tensorflow - 从 tensorflow 中的 .tfrecords 文件获取路径
- css - 如何自动调整引导导航栏中的下拉框不超过页面宽度?