【问题标题】:Is there any way to type guards a block/function with my own validation function?有什么方法可以使用我自己的验证功能来保护块/功能?
【发布时间】:2016-12-29 09:20:42
【问题描述】:

我正在尝试创建一个类来管理组件,但我真的陷入了联合类型和 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 进行验证时,这有效。

有什么符号或方法可以使用我自己的类型验证吗?

【问题讨论】:

  • 请包含代码本身,而不是屏幕截图。屏幕截图不会被搜索引擎索引。
  • @MikeMcCaughan,谢谢。我添加了一些 sn-p

标签: typescript


【解决方案1】:

你正在寻找类型保护is T

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

【讨论】:

    猜你喜欢
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多