반응형
형식:동일한 개체 내의 다른 속성에 종속되는 속성 유형
두 가지 속성을 가진 TypeScript 인터페이스가 있음(type:string
그리고args:object
. The.args
에 따라 다른 특성을 가질 수 있다.type
. 적용해야 하는 유형 정의args
컴파일러/완료자가 어떤 속성이 허용되는지 알 수 있도록args
?
이것은 내가 Redex에서 액션을 사용하는 방식과 다소 유사하다.type
그리고 apayload
내 환원기에서 컴파일러는 페이로드가 무엇을 포함하고 있는지 스위치로 알 수 있다.하지만 내 목적과 함께 이걸 작동시킬 수는 없어.나는 https://artsy.github.io/blog/2018/11/21/conditional-types-in-typescript/에서 훌륭한 기사를 읽었지만, 이것은 서로 의존하는 두 개의 아그로 된 방법의 문제점을 설명하고 있다. 그러나 어떻게 하면 동일한 개체 내의 두 개의 속성에서 이것을 작동시킬 수 있을지는 모른다.
export interface IObject {
type: ObjectType
parameters: ObjectParameters
}
export type ObjectType = "check" | "counter"
export interface IParametersCheck {
checked: boolean
}
export interface IParametersCounter {
max: number
min: number
step: number
}
export type ObjectParameters = IParametersCheck | IParametersCounter
만약 내게도 a가 있다면IObject
그리고 컴파일러/완성이 다음에 대한 속성을 제공해야 하는 유형을 "확인"으로 설정하십시오.IParametersCheck
.
나는 네가 실제로 찾고 있는 것이 차별받는 결합이라고 생각해. IObject
그 자체가 결합이 될 경우:
export type IObject = {
type: "checked"
parameters: IParametersCheck
} | {
type: "counter"
parameters: IParametersCounter
}
export type ObjectType = IObject['type'] //// in case you need this union
export type ObjectParameters = IObject['parameters'] //// in case you need this union
export interface IParametersCheck {
checked: boolean
}
export interface IParametersCounter {
max: number
min: number
step: number
}
조건부 유형으로도 할 수 있지만, 나는 조합 솔루션이 더 효과적이라고 생각한다.
export interface IObject<T extends ObjectType> {
type: T
parameters: T extends 'checked' ? IParametersCheck: IParametersCounter
}
또는 매핑 인터페이스가 있는 경우
export interface IObject<T extends ObjectType> {
type: T
parameters: ParameterMap[T]
}
type ParameterMap ={
'checked': IParametersCheck
'counter': IParametersCounter
}
export type ObjectType = keyof ParameterMap
반응형
'Programing' 카테고리의 다른 글
한 줄로 여러 칸을 간단하게 제거할 수 있는 방법이 있는가? (0) | 2022.04.09 |
---|---|
Vuetify Data Iterator + Data 테이블의 페이지당 행 항목 이해, 기본 페이지를 설정할 수 있는가? (0) | 2022.04.09 |
구성 요소가 리듀렉스 저장소에 연결되지 않는 이유 (0) | 2022.04.09 |
Typecript 3.7@베타(선택 사항) 문제를 사용하는 체인 작업자 (0) | 2022.04.09 |
Nuxt + Vuex mapGetters 값은 항상 정의되지 않음 (0) | 2022.04.09 |