我正在尝试创建一个用于管理组件的类,但我真的遇到了一个带有union类型和TypeScript类型保护的问题。
实施例
namespace Validation {
export function isString(value: any): boolean {
return (typeof value === "string" || value instanceof String);
};
export function isElement(value: any): boolean {
return (value instanceof Element);
};
};
class Component {
constructor(selectorOrElement: string | Element) {
var element: Element = (Validation.isString(selectorOrElement)) ? document.querySelector(selectorOrElement) : selectorOrElement;
if (!Validation.isElement(element)) throw new Error("element is null or not found");
}
}
我尝试使用自己的类型验证来验证联合类型,但是TypeScript不允许我使用变量作为有效类型...当我使用JavaScript验证时,默认typeof selectorOrElement === "string"
和element instanceof Element
是否有任何符号或方法可以使用我自己的类型验证?
答案 0 :(得分:2)
您正在寻找型号守卫is T
:
function isString(value: any): value is string {
return typeof value === 'string';
}