我们根据此帖子创建了以下类型: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
有办法使它工作吗?
答案 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