有没有办法用我自己的验证函数键入一个块/函数?

时间:2016-08-22 18:08:29

标签: typescript

我正在尝试创建一个用于管理组件的类,但我真的遇到了一个带有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");
  }
}

Screenshot of my code

我尝试使用自己的类型验证来验证联合类型,但是TypeScript不允许我使用变量作为有效类型...当我使用JavaScript验证时,默认typeof selectorOrElement === "string"element instanceof Element

是否有任何符号或方法可以使用我自己的类型验证?

1 个答案:

答案 0 :(得分:2)

您正在寻找型号守卫is T

function isString(value: any): value is string {
  return typeof value === 'string';
}