У меня есть следующее определение
interface IAutoCompleteInputProps<T> {
textMember: keyof T;
imageMember: keyof T;
data: T[];
}
Но я также хочу убедиться, что значение T[textMember]
тоже должно быть string
. Как я могу этого добиться?
=== Обновление: После того, как я реализовал ответ @R Pasha, когда я пытаюсь получить доступ к textMember
с помощью a.data[a.textMember]
(я ожидаю, что он быть строкой), но IDE говорит, что
(property) value: T[{ [K in keyof T]: T[K] extends string ? K : never; }[keyof T]]
Type 'T[{ [K in keyof T]: T[K] extends string ? K : never; }[keyof T]]' is not assignable to type 'string'.
Type 'T[T[keyof T] extends string ? keyof T : never]' is not assignable to type 'string'.
Type 'T[keyof T]' is not assignable to type 'string'.
Type 'T[string] | T[number] | T[symbol]' is not assignable to type 'string'.
Type 'T[string]' is not assignable to type 'string'.ts(2322)
я могу преобразовать его в строку, но просто хочу знать, почему? Спасибо
PS код, в котором я получил ошибку
function Application<T>(props: IAutoCompleteInputProps<T>) {
const x = props.data[0][props.textMember]; // x here is not string
}
Вот Ссылка на игровую площадку