У меня есть интерфейс TypeScript с двумя свойствами (type:string
и args:object
). args
может иметь различные свойства в зависимости от type
. Какое определение типа мне нужно применить к args
, чтобы компилятор / автозаполнение знал, какие свойства разрешены для args
?
Это несколько похоже на то, как я использую Actions в Redux, который имеет type
и payload
, и в моем редукторе компилятор знает по инструкции switch, что содержит полезная нагрузка. Но я не могу заставить это работать с моим объектом.
Я прочитал отличную статью здесь 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
.