【发布时间】:2020-07-12 10:48:30
【问题描述】:
我有以下定义
interface IAutoCompleteInputProps<T> {
textMember: keyof T;
imageMember: keyof T;
data: T[];
}
但我也想确保T[textMember] 的值也必须是string。
我怎样才能做到这一点?
=== 更新:
在我实现了@R Pasha 的答案后,当我尝试通过a.data[a.textMember] 访问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
}
【问题讨论】:
标签: typescript typescript-generics