내가 사용 해요 LIB (아프로디테)이 유형 정의가 있습니다Typescript에서 인덱스 서명을 정제 할 수 있습니까?
interface StyleDeclaration {
[key: string]: CSSProperties;
}
나는 key
의 지정된 목록의 하위 집합이어야합니다 하위 유형을 만들려면을하지만, 하위 유형은로 사용할 수 있습니다 StyleDeclaration
.
내 최고의 시도하고있다 :이 시점까지, 잘 작동
type CssTransStyleName =
'defaultStyle' | 'activeStyle' | 'etcetera'
type CssTransStyleDeclaration = {[K in CssTransStyleName]?: CSSProperties}
- 나는 StyleDeclaration로 인스턴스를 사용하려고 시도 지점. 예를 들어, 주어진 :
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'.
분명히, 컴파일러는 CssTransStyleName
의 모든 속성 유형의 값이 "의미하는 것으로
{[K in CssTransStyleName]?: CSSProperties}
해석 :
const cssDeclaration: CssTransStyleDeclaration = {
style: {
transformOrigin: 'top left',
},
}
const ss: StyleDeclaration = cssDeclaration
컴파일러는 불평 CSSProperties | undefined
, 일부 속성은 존재하고 어떤 속성은 존재하지 않는다고 말하려고했습니다.
주조 as StyleDeclaration
은 작동하지만 덕트 테이프를 사용하지 않는 것이 좋습니다.
는 또한
type CssTransStyleDeclaration = {[K in CssTransStyleName]?: CSSProperties} & StyleDeclaration
StyleDeclaration
와 같은 그것을 만드는; 속성은
CssTransStyleName
의 속성으로 제한되지 않습니다.
오류를 만드는 코드를 게시 할 수 있습니까? –
@shambalambala 감사합니다. 위의 내용을 참조하십시오. –