泛型类型变窄

时间:2019-11-18 00:02:33

标签: typescript

我很难弄清为什么以下方法不起作用:

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应该知道结果值必须是字符串!

我在这里想念什么?

0 个答案:

没有答案