我已经尝试过尝试使用的每种方式,并且确实查看了其他有关递归类型的文章,但是我无法创建适用于这种情况的递归类型。
我想要的是让这种类型接受CSSStyleDeclaration
的部分属性,并且对于与CSSStyleDeclaration
的属性匹配的所有 not 属性,我希望它映射回去类型本身。
这似乎仅适用于第一级:
interface NestedCSSDeclarations {
[name: string]: CSSDeclaration;
}
type CSSDeclaration = {
[P in keyof CSSStyleDeclaration]?: CSSStyleDeclaration[P];
} & NestedCSSDeclarations
function css(obj: CSSDeclaration) {
// ...
}
let style = {
headline: css({
color: "red",
h1: {
color: "blue",
"&:hover": {
color: "green"
}
},
"@media screen and (min-width: 400px)": {
h1: {
fontSize: "50px"
}
}
})
}
没有办法提示吗?
答案 0 :(得分:1)
如果您使用|
运算符而不是&
,它将很好用
type CSSDeclaration = {
[P in keyof CSSStyleDeclaration]?: CSSStyleDeclaration[P];
} | NestedCSSDeclarations