我使用一個lib(阿芙羅狄蒂)具有這種類型的定義:可以改進Typescript中的索引簽名嗎?
interface StyleDeclaration {
[key: string]: CSSProperties;
}
我想創建一個亞型,其中key
s必須是一個指定列表的一個子集,但亞型可以作爲一個StyleDeclaration
。
我最好的嘗試是:
type CssTransStyleName =
'defaultStyle' | 'activeStyle' | 'etcetera'
type CssTransStyleDeclaration = {[K in CssTransStyleName]?: CSSProperties}
這種運作良好,在一定程度上 - 在我嘗試使用實例作爲StyleDeclaration點。例如,給定:
const cssDeclaration: CssTransStyleDeclaration = {
style: {
transformOrigin: 'top left',
},
}
const ss: StyleDeclaration = cssDeclaration
編譯器抱怨:
Type 'CssTransStyleDeclaration' is not assignable
to parameter of type 'StyleDeclaration'.
Property 'defaultStyle' is incompatible with index signature.
Type 'CSSProperties | undefined' is not assignable to type 'CSSProperties'.
Type 'undefined' is not assignable to type 'CSSProperties'.
顯然,編譯器解釋
{[K in CssTransStyleName]?: CSSProperties}
爲意指「在CssTransStyleName
每個屬性具有類型的值CSSProperties | undefined
,而我試圖說一些屬性會存在,有些則不存在。
鑄造as StyleDeclaration
工程,但我不想使用管道膠帶。
我也試過
type CssTransStyleDeclaration = {[K in CssTransStyleName]?: CSSProperties} & StyleDeclaration
但是這有效地使得它一樣只是一個StyleDeclaration
;該屬性不限於CssTransStyleName
中的屬性。
你能發佈產生錯誤的代碼嗎? –
@shambalambala謝謝,更新 - 見上面 –