querySelector
的结果要么是:Element - 最常见的基类,要么是null
。document.getElementById('elementId').
/** @type {HTMLElement} */
var el = document.querySelector(".myclass");
el.
// or without extra variable:
/** @type {HTMLElement} */
(document.querySelector(".myclass")).
我没有真正测试过,但你可以尝试类似这样的方法:
/**
* @type {function(string): HTMLElement}
*/
var querySelector = document.querySelector.bind(document);
querySelector('.myclass').
另一个选择是更改 TypeScript 类型:
dom.d.ts
interface NodeSelector {
querySelector<K extends keyof ElementTagNameMap>(selectors: K): ElementTagNameMap[K] | null;
querySelector<E extends HTMLElement = HTMLElement>(selectors: string): E | null;
querySelectorAll<K extends keyof ElementListTagNameMap>(selectors: K): ElementListTagNameMap[K];
querySelectorAll<E extends HTMLElement = HTMLElement>(selectors: string): NodeListOf<E>;
}
// We can "cast" types to other types using a JSDoc type assertion
// by adding an `@type` tag around any parenthesized expression.
/**
* @type {number | string}
*/
var numberOrString = Math.random() < 0.5 ? "hello" : 100;
var typeAssertedNumber = /** @type {number} */ (numberOrString)