我有一个TypeScript接口,其中包含两个属性(type:string
和args:object
)。根据type
的不同,args
可能具有不同的属性。我需要应用什么类型定义到args
才能让编译器/自动完成知道哪些属性允许在args
中使用?
这与我在Redux中使用的Actions有些相似,它们确实有一个type
和一个payload
,在我的reducer中,编译器通过switch语句知道payload包含了什么,但我无法让它在我的对象中正常工作。
我读了一篇很好的文章,在这里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
如果我有一个IObject
并将其类型设置为"check",编译器/自动完成应该提供IParametersCheck
的属性。
type
和parameters
之间没有连接,所以我不确定您是否可以设置此限制。也许在您创建操作的任何地方,您可以使用通用类型,并将其定义为IObject<ParameterType>
? - Icepickle