Как получить тип свойства интерфейса в TypeScript?
Итак, у меня есть такой код:
interface MyInterface{
a:any,
b:string,
c:boolean,
d:number,
readonly valueChanges:Subject<{key: keyof MyInterface, value: ???}>
}
где я не знаю, как написать тип значения под правильным «ключом». Я пробовал, typeof MyInterface[key]но, вероятно, это не способ решения. :(
Заранее благодарим за уделенное время!
Ответы
Вы можете использовать AllValuesтип утилиты, опубликованный Тицианом Черниковой-Драгомиром . Обратите внимание, что вам не нужно, extends Record<PropertyKey, PropertyKey>поскольку это относится к проблеме инвертирования.
type AllValues<T> = {
[P in keyof T]: { key: P, value: T[P] }
}[keyof T]
Затем вы применяете этот тип к своему интерфейсу, но убедитесь, что {key: valueChanges...}это не один из ваших вариантов.
type KeyValueObject = AllValues<Omit<MyInterface, "valueChanges">>
interface MyInterface{
a: any;
b: string;
c: boolean;
d: number;
readonly valueChanges: Subject<AllValues<Omit<MyInterface, "valueChanges">>>;
}
Мне не нравятся здесь круговые ссылки, поэтому лично я бы разбил их на составные части. MyInterfaceбудет typeскорее как a , чем как an interface, но практической разницы здесь очень мало.
interface BaseInterface {
a: any;
b: string;
c: boolean;
d: number;
}
type WithValueChanges<T> = T & {
readonly valueChanges: Subject<AllValues<T>>
}
type MyInterface = WithValueChanges<BaseInterface>