我很难弄清为什么以下方法不起作用:
type StringPropertyNames<T> =
{
[K in keyof T]: T[K] extends string ? K : never
}[keyof T]
function propertyValueToUppercase<T>(values: T, field: StringPropertyNames<T>) {
// Property 'toUpperCase' does not exist on type 'T[{ [K in keyof T]: T[K] extends string ? K : never; }[keyof T]]'
return values[field].toUpperCase();
}
StringPropertyNames<T>
应该是存储string
的通用类型的所有属性的并集,对吗?因此,当我做values[field]
时,TypeScript应该知道结果值必须是字符串!
我在这里想念什么?