结合使用KeysOfType和泛型

时间:2018-10-16 15:05:41

标签: typescript typescript-typings

我们根据此帖子创建了以下类型:https://stackoverflow.com/a/49752227

export type KeysOfType<T, TProp> = { [P in keyof T]: T[P] extends TProp? P : never}[keyof T];

在此示例中

class A {
   public prop1: number;
   public prop2: string;
   public prop3: string;
}
class B<O extends A>
{
   private prop: KeysOfType<O, string>;
   private prop2: KeysOfType<A, string>;

   public method(): void
   {
      let o: O;
      let notTypedAsString = o[this.prop];
      let a: A;
      let typedAsString = a[this.prop2];
    }
}

尽管o[this.prop]的类型是O的“字符串”属性,但表达式this.prop的类型不是字符串。

链接到playground

有办法使它工作吗?

1 个答案:

答案 0 :(得分:0)

您引用的答案(总是很高兴被引用:))在使用站点上效果很好。因此,当您使用使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="row"> <a class="cat-bonnet" href="https://www.google.com">Link</a> </div>的类或函数时,您将获得预期的行为。问题在于,在不知道泛型类型的类或函数内部,打字稿无法推断出索引操作将产生什么。

我们可以使用类似于here的方法。泛型参数本身扩展了仅具有字符串键(KeysOfType)的内容。我们将需要一个额外的参数Record<K, string>来仅捕获K类型的字符串键,但它们都能按预期工作:

O