问题场景是这样的,下面的 container 变量是一个方法中的局部变量
const container = appendElement(document.body, 'form', (form) => (form.id = 'captcha_form'));
现在想改用类的成员变量来保存,但 appendElement 的返回值类型是泛型
export function appendElement<K extends keyof HTMLElementTagNameMap>(
parent: HTMLElement,
tagName: K,
builder?: (element: HTMLElementTagNameMap[K]) => void
): HTMLElementTagNameMap[K] {
const element = document.createElement(tagName);
if (builder) {
builder(element);
}
parent.appendChild(element);
return element;
}
请问如何定义 container 的类型?
private container?: HTMLElementTagNameMap[K];
上面的定义会报错:
Type 'K' cannot be used as an index type
不想给整个类加上泛型声明
const container = appendElement(document.body, 'form', (form) => (form.id = 'captcha_form'));
这一行可以看出container可以定义为HTMLElement
或者HTMLFormElement
HTMLElement 可以
private container: HTMLElement = document.createElement("form");