【发布时间】:2019-09-27 11:37:04
【问题描述】:
我正在使用 React.CSSProperties 创建 css 变量,所以我可以像这样创建
let css: React.CSSProperties = {
position: "relative",
display: "inline-block",
background: "red"
}
我正在尝试创建一个主题,该主题将在根级别具有 css 变量或嵌套在修饰符中,例如 size(sm,md,lg) 或 variant(light,dark) 或其他如下
let theme: MyTheme = {
background: "red", // css
color: "white", // css
button: { // custom: component name Level1
background: "red", // css
color: "white", // css
light: { // custom: modifier variant Level2
background: "red", // css
color: "white", // css
hollow: { // custom: modifier Level3
borderColor: "red",
color: "red",
background: "transparent",
}
}
dark: {
background: "red",
color: "white",
hollow: {
borderColor: "black",
color: "black",
background: "transparent",
modfierLevel4: {
some: "css"
modfierLevel5: {
some: "css"
modfierLevel6: {
some: "css"
}
}
}
}
}
}
}
基本上我正在寻找如下打字稿中的递归对象类型,但最终以循环引用结束?
type Modifiers = 'button' | 'dark' | 'light' | 'otherModifiers'
interface Theme extends React.CSSProperties {
[k in Modifiers]?: Theme;
}
我能够找到答案(如下)接近它。
type Theme = React.CSSProperties & { [keys in Modifiers]?: Theme }
但面临一些问题。如果给定的修饰符名称无效,例如“btn”而不是“button”
- 错误在 1 级正确抛出(如预期)
- 但是从级别 2 及以上不会引发错误。 (但预计会抛出错误)
我应该如何为上述创建类型?
【问题讨论】:
标签: css reactjs typescript recursion