Typescript

时间:2018-10-18 14:12:30

标签: typescript typescript-typings typescript-generics

我已经尝试过尝试使用的每种方式,并且确实查看了其他有关递归类型的文章,但是我无法创建适用于这种情况的递归类型。

我想要的是让这种类型接受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"
      }
    }
  })
}

没有办法提示吗?

1 个答案:

答案 0 :(得分:1)

如果您使用|运算符而不是&,它将很好用

type CSSDeclaration = {
    [P in keyof CSSStyleDeclaration]?: CSSStyleDeclaration[P];
} | NestedCSSDeclarations