【发布时间】:2018-07-04 13:39:13
【问题描述】:
所以我有一个量角器列表页面对象。该对象默认返回 ElementFinder 实例,但可以自定义为返回 ComplexType 实例,如下所示:
class ComplexType {
foo = 'foo';
constructor(public element: ElementFinder) {}
}
const list = new List<ComplexType>({ element: ..., type: ComplexType});
expect(list.get(0).foo).toBe('foo');
这是页面对象定义:
import { ElementFinder } from 'protractor';
export interface ListItem<T> {
new(element: ElementFinder): T;
}
export interface ListOptions<T> {
element: ElementFinder;
selector?: string;
type?: ListItem<T>;
}
export class List<T = ElementFinder> {
public readonly element: ElementFinder;
private selector: string;
private type: (element: ElementFinder) => T;
get items() {
return this.element.$$(this.selector);
}
get length() {
return this.items.count();
}
constructor(options: ListOptions<T> | ElementFinder, selector?: string) {
if (options instanceof ElementFinder) {
this.element = options;
this.selector = selector || 'li';
this.type = (element: ElementFinder) => element;
} else {
this.element = options.element;
this.selector = options.selector || 'li';
this.type = (element: ElementFinder) => new options.type(element);
}
}
get(index: number): T {
return this.type(this.items.get(index));
}
}
我遇到的问题是打字稿不理解 T 有时是 ElementFinder。因此,当我返回 ElementFinder 的一个实例时,它会抱怨元素查找器与 T 不匹配。
我被难住了。这肯定有可能吗?
【问题讨论】:
标签: typescript protractor